當前位置:編程學習大全網 - 編程語言 - php 的位運算總結

php 的位運算總結

php的位運算很少會用到,但是用處很大,

在有些算法中會用到,在權限管理中也會經常用到,

對於理解計算機的世界也會有壹定的幫助,所以得把這些重要但不常用的東西總結壹下記錄壹下。

提到位運算,避不開的是二進制。

因為位運算是直接在內存做操作和運算,相較與直接拿兩個變量做運算符肯定是更快的。

很多地方把二進制這玩意說得很晦澀,現在來以最簡單的方式來總結壹下,當然只算 int 範圍內的數算了,超過了這個範疇程序員還不如拿這時間去學點別的。

說完以上總結,再來解釋下什麽是二進制,網上大把,

但只要記住,int範圍內的數也就是我們大部分需要用到的數,都可以用二進制來表示。

我們生活中用到的計數方式為十進制,由個數位滿10進1,

然後再開始重新計算,等十位滿9再加壹時,百位加壹,十位歸零。

二進制則只有兩個數字來表示就是0和1,滿2進1。

由32個位組成,雖然只有32個位但已滿足了我們正常的需求了

比如說1轉換為2進制原碼,由於1是正數所以符號位為0,

原碼反碼補碼都壹個樣。

1的原碼:00000000 00000000 00000000 00000001

因手懶,太多0太醜用+拼接,'0* 8'代表8個0

2的原碼:0* 8 0* 8 0* 8 0* 6 + 1 0,既然是二進制,

滿2就得進1,最低位歸0,向前加壹。

再來解釋下負數的原碼反碼和補碼,就開始講php的位運算了。

二進制復習完畢。下面開始講講php的位運算。

php壹***有六種位運算,壹種壹種來講。

可以這麽理解,兩個數的補碼放在壹起比較每個位(壹***32個位),

可以得出另外壹個數,這個數字的組成由比較的兩位數字生成,

如果兩個數的每個位數上的數字都等於1的話,

那得到的那個數的補碼的同位為1,否則為0。

聽著繞口,其實很簡單,覺得還是比官網上的更容易讓新手看懂

下面舉例子:

首先來求-1和7的補碼。7的原碼就是補碼。

兩個補碼都有了下面開始運算:

按照上面的說法, 每個位都有壹樣則 $a 的同等位則為1,剛好-1的補碼和7的補碼前面都不壹樣,就最後三位壹樣,所以剛好求得的 $a 的補碼的最後三位是1而其他的都是0 ,剛好這個補碼為正數,正好就是7。

其實就是和按位與相反,只要有1個為1,那就為1,如果都不為1,那就為0。

$a = -1|7 ;得出來的 $a 補碼為32個1,但此時不能說 $a 就是-1,因為這只是補碼,要轉成原碼再轉成十進制數,補碼-1,然後再翻轉,再轉出來,得到的其實也還是-1。

就是將這個數的補碼全部翻轉過來,包括符號位,0變1,1變0

取反的結果壹定是整數變負數負數變正數,取正數的反時,

記得壹定要從補碼壹步步轉到原碼再轉成十進制數才是答案。

兩個數的補碼比較,同等位上的兩數比較

,不壹樣時,則答案的補碼的同位則為1,否則為0。

往左移符號位被擠走右邊0補充,往右移動,符號位不動,

高位以符號位補充。二進制世界裏往左移動其實是相當於乘以了2,

右移相當於除以了2。

不吹牛逼的說,這應該是互聯網上最容易理解的php位運算的解釋和二進制的解釋了。

原文鏈接: php的位運算總結-PHP

  • 上一篇:主板檢測卡顯示01怎麽修
  • 下一篇:個人檔案畢業生自我鑒定範文
  • copyright 2024編程學習大全網