int to short 两个最高有效字节

int to short with two most significant bytes

我有一个整数

int a = //...

ints in java 由 4 个字节组成。如果我们将其转换为 short,我们将占用两个最低有效字节。获得由 int 的 2 个最重要的 byte 组成的 short 的最快方法是什么?

short b = //take two most significant bytes of a
short b = (short) (a >> 16);

使用右移位运算符(>>)就足够了。因为int原始数据类型有32位的大小(Primitive Data Types (The Java™ Tutorials > Learning the Java Language > Language Basics)),需要获取最高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语言有signed(<<,>>)和unsigned(<<<,>>>)位移位运算符。请参考文章:Bitwise and Bit Shift Operators (The Java™ Tutorials > Learning the Java Language > Language Basics).

使用除法运算符可以产生相同的结果:

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);
    }
}