一、二進(jìn)制:所謂二進(jìn)制就是逢二進(jìn)一 (0,1), 因?yàn)槭褂枚M(jìn)制只有 0, 1 兩個(gè)數(shù)披粟,簡(jiǎn)單若专,易于電子方式實(shí)現(xiàn) 豁翎, 同時(shí),通過0,1 組合可以表示任意一個(gè)數(shù).
二進(jìn)制有三個(gè)重要的概念:
1.原碼
用二進(jìn)制來表示一個(gè)數(shù)投蝉,這個(gè)碼就是原碼.
1 ------> 原碼 00000000 0000000 0000000 00000101 = 12的零次方+02的一次方+1* 2的二次方=1+0+4=5
2.負(fù)數(shù)的反碼=它的原碼符號(hào)位不變养葵,其它位取反(0->1,1->0)
反碼(正數(shù)的反碼和它的原碼一樣 , 負(fù)數(shù)反碼 是 符號(hào)位不變其它位取反)
補(bǔ)碼(正數(shù)的補(bǔ)碼和它的原碼一樣,負(fù)數(shù)的補(bǔ)碼是 它的反碼+1)
舉例
-1
-1的原碼 10000000 00000000 00000000 00000001
-1的反碼 11111111 11111111 11111111 11111110
-1 的補(bǔ)碼 11111111 11111111 111111111 11111111
3.在計(jì)算機(jī)運(yùn)算的時(shí)候墓拜,都是以補(bǔ)碼的方式來運(yùn)算的
4+5=>計(jì)算機(jī) 4-5=4+(-5)
這句話意思就是港柜,不管一個(gè)數(shù)是正數(shù)還是負(fù)數(shù),都要被轉(zhuǎn)成補(bǔ)碼咳榜,然后進(jìn)行運(yùn)算.
位運(yùn)算一覽表:
該圖的前面四個(gè)是位運(yùn)算
其運(yùn)算規(guī)則是:
按位與&∠淖怼: 兩位全為1,結(jié)果為1
按位或| : 兩位有一個(gè)為1涌韩,結(jié)果為1
按位異或 ^ : 兩位一個(gè)為0,一個(gè)為1畔柔,結(jié)果為1
按位取反 : 0->1 ,1->0
<h3>求解:~2=?</h3>
步驟 : 首先要求出 2的補(bǔ)碼
2是正數(shù) 所以 原碼=反碼=補(bǔ)碼
2 原碼
00000000 00000000 00000000 00000010
~2
11111111 11111111 11111111 11111101 (補(bǔ)碼)->原碼
? 負(fù)數(shù)的 原碼-》反碼-》補(bǔ)碼
11111111 11111111 11111111 11111101->
推出其反碼 (對(duì)補(bǔ)碼-1)
11111111 11111111 11111111 11111100
推出原碼
10000000 00000000 00000000 0000011 -> -3
~-5=?
-5 的 補(bǔ)碼找出來.
-5 原碼 10000000 00000000 00000000 00000101
-5 反碼 11111111 11111111 11111111 11111010
-5 補(bǔ)碼 11111111 11111111 11111111 11111011
~-5取反 00000000 00000000 00000000 00000100 (補(bǔ)碼)
4
2&3=?
2&3 首先要找到 2 和 3的補(bǔ)碼
2 的補(bǔ)碼 00000000 00000000 00000000 00000010
3 的補(bǔ)碼 00000000 00000000 00000000 00000011
2&3 00000000 00000000 00000000 00000010 [補(bǔ)碼]
2|3=?
2 的補(bǔ)碼 00000000 00000000 00000000 00000010
3 的補(bǔ)碼 00000000 00000000 00000000 00000011
2|3 00000000 00000000 00000000 00000011
2^3
2 的補(bǔ)碼 00000000 00000000 00000000 00000010
3 的補(bǔ)碼 00000000 00000000 00000000 00000011
2^3 00000000 00000000 00000000 00000001
13&7=?
5|4=?
-3^3=?
二:位移運(yùn)算:在php 中位運(yùn)算有兩種 >> (右移) << (左移)
運(yùn)算的規(guī)則是 :
算術(shù)右移:低位溢出,符號(hào)位不變,并用符號(hào)位補(bǔ)溢出的高位
算術(shù)左移: 符號(hào)位不變,低位補(bǔ)0
根據(jù)我們前面的規(guī)范,來完成幾個(gè)案例
$a=1>>2;
1 的補(bǔ)碼
00000000 00000000 00000000 00000001
1>>2
00000000 00000000 00000000 00000000
$b=-1>>2;
步驟 -1 的補(bǔ)碼
-1 的原碼 10000000 00000000 00000000 00000001
-1 的反碼 11111111 11111111 11111111 11111110
-1 的補(bǔ)碼 11111111 11111111 11111111 11111111
-1 >> 2
11111111 11111111 11111111 11111111 補(bǔ)碼
結(jié)果
補(bǔ)碼->原碼
反碼 11111111 11111111 11111111 11111110
原碼 10000000 0000000 00000000 00000001
$c=1<<2;
1<<2
1的補(bǔ)碼
00000000 00000000 00000000 00000001
00000000 00000000 00000000 00000100
$d=-1<<2;