2017-08-12 61 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); 
    } 
}