int to short 两个最高有效字节
int to short with two most significant bytes
我有一个整数
int a = //...
int
s 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);
}
}
我有一个整数
int a = //...
int
s 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);
}
}