二進制
二進制就是用0和1來表示計算機語言的,0,1可以表示任意數,其逢二進一
將十進制(即阿拉伯數字)轉成二進制的計算步驟
二進制有三個重要概念
▶位運算
位運算符運算規則:
按位與&:兩位全為1,結果為1
按位或|:兩位有一個為1,結果為1
按位異或^:兩位中一個為0,一個為1,結果為1
按位取反~:0取1,1取0
根據規則, 計算一個數的步驟:
例如計算:~2=?
1.找出2的補碼,【因為計算機運算是以補碼的方式來進行運算的】
2的原碼:00000000 00000000 00000000 00000010
//上面的字串從左往右數第一個數為0,所以其為正數,而正數有個原則:正數的原碼=反碼=補碼,所以2的補碼就是上面這串數字
2.再取反
~2取反: 11111111 11111111 11111111 11111101
//上面的字串得到的是補碼,要想獲得我們想要的結果就要將補碼-->反碼-->原碼
3.補碼-->反碼 [(補碼-1)就是反碼]
反碼:11111111 11111111 11111111 11111100
4.反碼-->原碼 [符號位不變,也就是上面的字串從左往右數第一個數不變]
原碼:10000000 00000000 00000000 00000011=1*2^0+1*2^1=1+2=-3 //前面的紅色1表示負數,所以結果為-3
//^表示次方,2^0表示2的0次方,從右往左開始計算:即1(上面這串數字從右往左數的第一個1)*2^0+1(上面這串數字從右往左數的第二個1)*2^1
例如:2&3=?
1.找到2和3的補碼
2的補碼: 00000000 00000000 00000000 00000010
3的補碼: 00000000 00000000 00000000 00000011
//按位與&的運算:兩位都為1,結果為1
2&3= 00000000 00000000 00000000 00000010 // 前面的字串為補碼,由於其第一個數字為0,所以其為正數,正數的補碼=原碼,所以結果為2
終上:計算一個數的步驟就是原碼-->反碼-->補碼-->根據位運算符計算得到補碼-->反碼-->原碼-->再得到我們想要的值
▶ 位移運算
在php中位移運算符有兩種:>>(右移)和<<(左移)
運算的規則:
右移:低位溢出,符號位不變,並用符號位補溢出的高位 [通俗點就是將最右邊的數溢出,用最左邊的數(符號數)補溢出的個數,放在最左邊]
左移:符號位不變,低位補0 [通俗點就是將最左邊的數溢出,用0來補溢出的個數,放在最右邊]
根據規則,下面寫幾個案例:
A. $a=1>>2;//將1向右移動兩位
1.找出1的補碼
00000000 00000000 00000000 00000001
1>>2
00000000 00000000 00000000 00000000
$a=1>>2=0
B. $a=1<<2;//將1向左移動兩位
1.找出1的補碼
00000000 00000000 00000000 00000001
1<<2
00000000 00000000 00000000 00000100
$a=1<<2=4