AdSense

網頁

2020/7/10

Java 位元位移運算子 signed bit shift operators

Java 位元位移運算子(bit shift operators)範例如下。

Java 位元位移運算子可移動數值的二進位的位置,
向左移動的符號為<<
向右移動的符號為>>

例如整數8的二進位為1000
8 << 1代表二進位向左移動一單位為10000,整數值為16
相反地8 >> 1代表二進位向右移動一單位為100,整數值為4

int n = 2;

System.out.println(n); // 2
System.out.println(Integer.toBinaryString(n)); // 10

n = n << 1; // 10 => 100

System.out.println(n); // 4
System.out.println(Integer.toBinaryString(n)); // 100

n = n << 2; // 100 => 10000

System.out.println(n); // 16
System.out.println(Integer.toBinaryString(n)); // 10000

n = n >> 1; // 10000 => 1000

System.out.println(n); // 8
System.out.println(Integer.toBinaryString(n)); // 1000 

從以上可觀察到對整數來說,向左移動1個位置相當於乘以2,移動2個位置相當於乘以4,也就是說位移運算子右側的位移數相當於乘/除以多少2的次方。
n << k等同於n * 2k
n >> k等同於n * 2k

int n = 11;

System.out.println(n); // 11
System.out.println(Integer.toBinaryString(n)); // 1011

n = n << 2; // 1011 => 101100

System.out.println(n); // 44
System.out.println(Integer.toBinaryString(n)); // 101100

2 則留言:

Blue 提到...

相反地8 >> 1代表二進位向右移動一單位為100,整數值為8。

這結果因該為4呦

Matt 提到...

@Blue 謝謝糾錯

AdSense