位運算符號

 >> 算術右移  ===> 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
相關文章
相關標籤/搜索