二进制计算题
比如十進制的32 = 2*10的0次方 加上 3*10的一次方
以此類推
二進制:逢二進一
二進制(0,1)
二進制的最高位為符號位 0表負數 1為負數
正數的原碼 反碼 補碼 都是一樣的
負數的反碼=它的原碼符號位不變,其他位取反 0變1 1變零
負數的補碼=反碼加1
0的反碼 補碼都是0
PHP沒有無符號數
計算機運算的時候都是以補碼的方式運算的
舉例:
-1的原碼為
10000000 00000000 00000000 00000001
反碼為
11111111 11111111 11111111 11111110
補碼為
11111111 11111111 11111111 11111111
一個二進制字符 占用四個字節 一個字節等于8個bit
那么1的二進制表示為
00000000 00000000 00000000 00000001
PHP 位運算符號
& 按位與 兩位全為1 結果為1
| 按位或 兩位有一個為1 結果就為1
^ 按位異或 一個為0 一個為1 結果為1
~ 俺位取反 0->1 1->0
d emo
~2 = ?
步驟:
先找出2的補碼(正數的反碼 原碼 補碼都是同一個)
00000000 00000000 00000000 00000010
再按位取反
11111111 11111111 11111111 111111101(補碼-> 原碼)
11111111 11111111 11111111 111111100 反碼
10000000 00000000 00000000 000000011 原碼
1+1*2的零次方 + 1* 2的一次方 = -3
2&3 =?
2的補碼
00000000 00000000 00000000 000000010
3的補碼
00000000 00000000 00000000 000000011
所以得
到補碼為
00000000 00000000 00000000 000000010
正數的補碼 反碼 都是一樣
所以
答案是2
其他的類推
PHP 移位運算符
<< 算數坐移
>>
對二進制數進行移動
運算規則:
算術右移:低位溢出,符號位不變,并且符號位補溢出的高位
算術左移:符號位不變,低位補零
demo:
$a = 1>>2
1的補碼
00000000 00000000 00000000 00000001
01 溢出 在高位補符號位 00(符號位不變)
答案是0
$a = -1<<2
10000000 00000000 00000000 00000001 原碼
11111111 11111111 11111111 11111110 反碼
11111111 11111111 11111111 11111111 補碼
11111111 11111111 11111111 11111100
11111111 11111111 11111111 11111011
10000000 00000000 00000000 00000100
-4
積累知識,分享知識,學習知識。
總結
- 上一篇: Angular应用的部署方式
- 下一篇: LOL大乱斗S12炼金男爵怎么出装