2017-08-12 62 views
1

我有一个整数int到short具有两个最显著字节

int a = //... 

int S IN的java包括4个字节。如果我们将其转换为short,我们将采用两个最低有效字节。 shortint的2个最重要的byte组成的最快方式是什么?

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

的可能的复制(https://stackoverflow.com/questions/28876549/ [如何从Java int的获得最显著n位]如何对获得大最显著正位,从-INT-中的Java)。 –

回答

5
short b = (short) (a >> 16); 
4

就足够了使用右位移位运算符(>>)。由于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); 
    } 
}