PHP位元運算符詳解____PHP

來源:互聯網
上載者:User
位元運算符

位元運算符是指對二進位位從低位到高位對齊後進行運算。

符號 作用 舉例 個人理解
& 按位與 $m & $n 全1為1,否則為0
| 按位或 $m | $n 全0為0,有1為1
^ 按位異或 $m | $n 不同為1,相同為0
~ 按位取反 ~$m
<< 向左移位 $m << $n
>> 向右移位 $m >> $n
&運算子
<?php$m = 1;$n = 2;$mn = $m & $n;echo $mn;

運行結果為0

解釋:將1,2分別轉換為二進位為

00000001

00000010

在按位與的過程中,位元壓縮,全1為1,比較結果為00000000,所以輸出0 |運算子

<?php$m = 1;$n = 2;$mn = $m | $n;echo $mn;

運行結果為3,同樣,轉換成如上的二進位

00000001

00000010

在按位或的過程中,有1為1,全0為0,則結果為00000011,所以輸出3 ^運算子

<?php$m = 1;$n = 2;$mn = $m ^ $n;echo $mn;

運行結果為3,同樣,轉換成如上的二進位

00000001

00000010

在按位亦或的過程中,不同為1,相同為0,所以結果為00000011,進而輸出3。 ~運算子

<?php$m = 2;$m1 = ~$m;echo $m1;

運行結果為-3,此處引人深思。

註:在電腦中,負數以其正值的補碼形式表達。

1: 2的32位原碼為 0000 0000 0000 0000 0000 0000 0000 0010

2: 按位取反後為 1111 1111 1111 1111 1111 1111 1111 1101

由於最前面的數為1,符號位為1,即為負數,所以,以其正值的補碼形式表示為:(符號位不變,按位取反,末尾加1)

1000 0000 0000 0000 0000 0000 0000 0011

所以輸出為-3 <<運算子

<?php$m = 3;$m1=$m << 1;echo $m1;

運算結果為6

左移運算的實質是將對應的資料的二進位值逐位左移若干位,並在空出的位置上填0,最高位溢出並捨棄。

3的32位原碼為,0000 0000 0000 0000 0000 0000 0000 0011

左移一位:0000 0000 0000 0000 0000 0000 0000 0110

所以為6

根據手冊描述可以看出位元運算可以看出向左移一位,則是實現乘2運算。由於位移操作的運算速度比乘法的 運算速度高很多。因此在處理資料的乘法運算的時,採用位移運算可以獲得較快的速度。
提示 將所有對2的乘法運算轉換為位移運算,可提高程式的運行效率。 >>運算子

右移一位,和<<運算子,類似,只不過這個是右移,此處不在做過多解釋。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.