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