我有一个整数int到short具有两个最显著字节
int a = //...
int
S IN的java包括4个字节。如果我们将其转换为short
,我们将采用两个最低有效字节。 short
由int
的2个最重要的byte
组成的最快方式是什么?
short b = //take two most significant bytes of a
我有一个整数int到short具有两个最显著字节
int a = //...
int
S IN的java包括4个字节。如果我们将其转换为short
,我们将采用两个最低有效字节。 short
由int
的2个最重要的byte
组成的最快方式是什么?
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);
}
}
的可能的复制(https://stackoverflow.com/questions/28876549/ [如何从Java int的获得最显著n位]如何对获得大最显著正位,从-INT-中的Java)。 –