二進制位運算

  1. 二進制的最高位是符號位,php中的數都是有符號的,正數是0負數是1;整數都是4個字節,1個字節有8位
  2. 正數的原碼、反碼、補碼都同樣,0的反碼、補碼都是0
  3. 負數的反碼:符號位不變,其它位所有取反
  4. 負數的補碼:負數的反碼+1
  5. 在計算機運算的時候,都是以補碼的方式來運算的

 

 

題目1:    ~2=?php

2的原碼:00000000 00000000 00000000 00000010   正數的原碼、補碼、反碼同樣web

~$a ,按位取反 ,將 $a 中爲 0 的位設爲 1,反之亦然。spa

解題思路:1.首先找出2的補碼code

2.所有取反後的補碼:11111111 11111111 11111111 11111101blog

3.取反後的反碼:11111111 11111111 11111111 11111100ci

4.取反後的原碼:10000000 00000000 00000000 00000011input

5.計算後的數字結果:-3it

 

題目2:      2&3 =?io

$a&$b 將把 $a 和 $b 中都爲 1 的位設爲 1。table

解題:

1.2的補碼:00000000 00000000 00000000 00000010

   3的補碼:00000000 00000000 00000000 00000011

2.都爲1的設置爲1以後補碼爲 : 00000000 00000000 00000000 00000010

3.反碼爲不變

4.原碼爲不變

5.計算數值爲:2

 

題目3: -3>>2 = ?

向任何方向移出去的位都被丟棄。左移時右側以零填充,符號位被移走意味着正負號不被保留。右移時左側以符號位填充,意味着正負號被保留。

解題:

-3的原碼: 10000000 00000000 00000000 00000011

-3的反碼: 11111111 11111111 11111111 11111100

-3的補碼: 11111111 11111111 11111111 11111101

補碼右移兩位後的補碼:11111111 11111111 11111111 11111111

補碼->反碼:11111111 11111111 11111111 1111110

反碼->原碼:10000000 00000000 00000000 00000001

數值結果:-1

 

 

 

~ $a Not(按位取反) 將 $a 中爲 0 的位設爲 1,反之亦然。
相關文章
相關標籤/搜索