PHP原碼,反碼,補碼介紹
原碼:
就是“原來的二進位碼”,其實就是我們可以理解的按十進位轉換為二進位之後得到的一個字元碼。原碼在數字上都是可以理解的。但在實際的電腦的運行過程中,卻常常不用原碼,所以就有反碼,補碼的問題。
在此基礎上,規則:一個位元字的第一個位是符號位,0表示正數,1表示負數。
舉例:(都以8位為例):
7: 00000111
-7: 10000111
反碼:
正數的反碼就是其本身。
負數的反碼就是將原碼的非符號部分,每一位取反。。
舉例:
7: 00000111
-7: 11111000
補碼:
正數的補碼是其本身
負數的反碼,符號位不變,其餘每一位取反之後,整體加1
舉例:
7: 00000111
-7: 11111000+1 = 11111001
加法運算:
減法運算:
總結:
1:資料在CPU內部都是按補碼進行運算
2:原碼,反碼,補碼的轉換過程是系統內部的工作,且轉換時符號位不變
3:用補碼運算時,符號位參與運算(即當作一個普通的二進位位的數字進行運算)
管理一組事物(資料)的開關狀態
開關狀態:就是某種資料,它只有2個值可用:true,false,1,0,開,關。。。
一組事物是指:多個資料的任意可能的出現狀態
我們假設有5個燈光的開關需要管理:
1:確定每個燈泡的狀態:開,關;
2:可以指定開啟任意一個燈泡
3:可以指定關閉任意一個燈泡
設定前提:這5個燈泡有明確的順序,我們將設定5個變數(常量其實也行)
假設1-5個燈泡的位置從右往左邊數--對應數位位元
第一個燈泡:$d1 = 1; //00000001
第二個燈泡:$d2 = 2; //00000010
第三個燈泡:$d3 = 4; //00000100
第四個燈泡:$d4 = 8; //00001000
第五個燈泡:$d5 = 16; //00010000
則所有燈泡的總的狀態,就可以使用一個變數來描述:
如果$state = 7; //00000111 就表示第一,二,三個燈泡亮
如果$state = 9; //00001001 就表示第一,四個燈泡亮
如果$state = 13; //00001101 就表示第一,二,四個燈泡亮
確定一個燈泡的開關狀:
$s1 = $state & $dn //這裡n表示1-5之間的任意一個
則結果如果$s1 > 0 ,就表示該燈泡亮,否則就表示該燈泡滅
開啟指定的燈泡:
$state = $state | $dn; //這裡n表示1-5之間的任意一個
關閉指定燈泡:
$state = $state & ~$dn; //這裡n表示1-5之間的任意一個