標籤:out 代碼 補碼 span 運算 sys integer 二進位 bsp
著作權聲明:轉載請註明出處:http://www.cnblogs.com/lkcc/ 請讀者親自試一試代碼,以免文章有誤而誤解。 移位元運算 :將整數轉化為二進位(以補碼的形式),按位平移。
<< 左移
>> 右移
>>> 無符號右移
<< 右移:
按位做平移,末位用0補上(正負數都一樣)
a << n;
如果 a 是 byte、short、int 類型 那麼 a << n 就是 a << (n%32)
int a = 5;
System.out.println(a<<3); //輸出 40
System.out.println(a<<35); //輸出 40
如果 a 是 long 類型 那麼 a << n 就是 a << (n%64)
long a = 5;
System.out.println(a<<3); //輸出 40
System.out.println(a<<35); //輸出 171798691840
System.out.println(a<<67); //輸出 40
注意 :由於這隻是按位平移,有可能符號化會改變
int a = 1;
a<<=31;
System.out.println(a); //輸出 -2147483648
System.out.println(Integer.toBinaryString(a)); //輸出 1000 0000 0000 0000 0000 0000 0000 0000
由於最高位是1所以是一個負數
>> 右移:
按位做平移
如果 a 是 byte、short、int 類型 那麼 a >> n 就是 a >> (n%32)
int a = 40;
System.out.println(a>>3); //輸出 5
System.out.println(a>>35); //輸出 5
如果 a 是 long 類型 那麼 a >>n 就是 a >> (n%64)
long a = 40;
System.out.println(a>>3); //輸出 5
System.out.println(a>>35); //輸出 0
System.out.println(a>>67); //輸出 5
注意 : 正數右移,前補位0(正數往右移,最小為0)
System.out.println(40>>31); //輸出 0
System.out.println(Integer.toBinaryString(40>>31)); //輸出 0
負數左移,前補位1(負數往右移,最大為-1)
System.out.println(-40>>31); //輸出 -1
System.out.println(Integer.toBinaryString(-40>>31)); //輸出 1111 1111 1111 1111 1111 1111 1111 1111
負數右移,並不僅僅是除以2
System.out.println(-5>>1); //輸出 -3
System.out.println(Integer.toBinaryString(-5)); //輸出 1111 1111 1111 1111 1111 1111 1111 1011
System.out.println(Integer.toBinaryString(-5>>1)); //輸出 1111 1111 1111 1111 1111 1111 1111 1101
>>>無符號右移:
按位做平移,前補位用0(正負數都一樣)
如果 a 是 byte、short、int 類型 那麼 a >>> n 就是 a >>> (n%32)
int a = 40;
System.out.println(a>>>3); //輸出 5
System.out.println(a>>>35); //輸出 5
如果 a 是 long 類型 那麼 a >>> n 就是 a >>> (n%64)
long a = 40;
System.out.println(a>>>3); //輸出 5
System.out.println(a>>>35); //輸出 0
System.out.println(a>>>67); //輸出 5
謝謝讀看!
java 移位元運算