>> 算術右移 ===> a>>b : a/(2 的b%32)次方app
<< 左移位運算 ===> a << b : a*2(b次方)spa
1 算術右移位操做符code
捨棄二進制的最後N位,在二進制數的開頭增長N位符號位。blog
若是是負數故增長的兩個符號位爲11。string
exp1: int a1 = 12 >>1; //變量a1取值爲6 12的二進制表達式: 0000 1100 || 12 >> 1 右移動一位 0000 0110 十進制爲6 ------------------------------------------ exp2: int a=12 >>2 ; //-3 +12 == > -12 0000 1100 |-取反 1111 0011 |-加1 1111 0100 <-- -12 二進制形式 | 1111 1101 <-- -12是負數故增長兩個符號位爲11 | 1111 1101 <--負數 --> 正數 1111 1100 1) -1 0000 0011 2) 取反 | 3 | 因爲負數故爲 -3
公式運算 a >> b ==> a/2 (b%32) 例如 : 12 >> 1 ==> 12/2 (1 次方) = 6 12 >> 33 ==> 12/2 (1次方) = 6 -12 >> 2 ==> -12/2 (2次方 ) = -3 -12 >> 66 ==> -12 /2 (66%32) = -12/2(2 次方) = -3 128 >>2 ==> 128/2 (2%32) = 128/2 (2次方)= 32
2 算術左移位操做符it
捨棄二進制數開頭一位數。在二進制數尾部增長一位0。
a << b ===> a*2(的b次方)
例子:ast
1 int a1 = 12<< 1; //24class
2 int a2 = -12 << 2;// -48變量
3 int a3 = 128 << 2; //512二進制
4 int a4 = 129 << 2; // 516
1 .
1 ----------------------------------------- 12 的二進制表達形式 0000 0000 0000 1100 去掉最右邊的一位,最左邊填充一個0 0000 0000 0001 1000 || \/ 等價於 24 2 ----------------------------------------- -12 的二進制 2.1 12 的二進制 0000 0000 0000 1100 2.2 取反 1111 1111 1111 0011 2.3 +1 1111 1111 1111 0100 2.4 left move 2 bit <delete the first 2 bit, and append 2 bit in the last of the string> 1111 1111 1101 0000 3 變成十進制數的形式 3.1 負數變正數 第一步-1 1111 1111 1100 1111 3.2 負數變正數第二步 取反 0000 0000 0011 0000 || \/ 48 || \/ 因爲是負數故爲 -48 3 ---------------------------------------------- int a3 = 128 << 2; 3.1 128 binary bit 0000 0000 1000 0000 3.2 left move 2 bit 捨棄二進制開頭兩位,在尾部補上兩位0 0000 0010 0000 0000 || \/ 512 4 ------------------------------------------------- int a4 = 129 << 2; //516 129的二進制 0000 0000 1000 0001 左移動兩位 0000 0010 0000 0100 || \/ 516