【发布时间】:2017-08-12 12:45:50
【问题描述】:
我有一个整数
int a = //...
ints 在 java 中由 4 个字节组成。如果我们将其转换为short,我们将占用两个最低有效字节。获得short 由int 中的两个最重要的bytes 组成的最快方法是什么?
short b = //take two most significant bytes of a
【问题讨论】:
我有一个整数
int a = //...
ints 在 java 中由 4 个字节组成。如果我们将其转换为short,我们将占用两个最低有效字节。获得short 由int 中的两个最重要的bytes 组成的最快方法是什么?
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 语言有有符号(<<、>>)和无符号(<<<、>>>)位移运算符。请参考文章: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);
}
}
【讨论】: