int для сокращения с двумя старшими байтами

У меня есть целое число

int a = //...

ints в java состоят из 4 байтов. Если мы приведем его к short, мы возьмем два младших байта. Каков самый быстрый способ получить short, состоящий из 2-х наиболее значимых byte из int?

short b = //take two most significant bytes of a

person St.Antario    schedule 12.08.2017    source источник
comment
Возможный дубликат Как получить n старших битов из int в java.   -  person Sergey Vyacheslavovich Brunov    schedule 12.08.2017


Ответы (1)


Достаточно использовать оператор сдвига правого бита (>>). Поскольку размер примитивного типа данных int составляет 32 бита (примитивные типы данных (Учебники по Java ™> Изучение языка Java> Основы языка)) и вам нужно получить 16 старших разрядов, необходимо выполнить сдвиг вправо на 16 бит:

public class Program {
    public static void main(final String[] args) {
        final int input = 0xABCDEFAB;
        final short output = (short) (input >> 16);
        System.out.printf("Original integer: %X%n", input);
        System.out.printf("Short with two most significant bytes: %X%n", output);
    }
}

Также стоит отметить, что в языке Java есть операторы битового сдвига со знаком (<<, >>) и без знака (<<<, >>>). См. Статью: Побитовые операторы и операторы битового сдвига (учебные пособия по Java ™ > Изучение языка Java> Основы языка).

Тот же результат можно получить с помощью оператора деления:

public class Program {
    public static void main(final String[] args) {
        final int input = 0xABCDEFAB;
        final short output = (short) (input / 0x10000);
        System.out.printf("Original integer: %X%n", input);
        System.out.printf("Short with two most significant bytes: %X%n", output);
    }
}
person Sergey Vyacheslavovich Brunov    schedule 12.08.2017