php--關於位運算符


常見四個位運算符:&(按位與),|(按位或),^(按位異或),~(按位取反)

&(按位與):對應位同時為1時,在&運算后則為1,否則為0

|(按位或):對應位有一個為1時,在|運算后則為1,同為0時則為0

^(按位異或):對應位不同時為1時,在^運算后為1,同時為0時則為0,同時為1時^運算后也是0

~(按位取反):$a+(~$a)=-1

在計算機中,負數以其正值的補碼形式表達。
 在這里我們就要知道三個概念了,原碼,反碼和補碼。

原碼:一個整數,按照絕對值大小轉換成的二進制數,稱為原碼。

8的原碼為:0000 0000 0000 0000 0000 0000 0000 1000

反碼:將二進制數按位取反,所得的新二進制數稱為原二進制數的反碼。取反操作指:1變0, 0變1。

8按位取反:1111 1111 1111 1111 1111 1111 1111 0111

補碼:反碼加1稱為補碼。也就是說,要得到一個數的補碼,先得到反碼,然后將反碼加上1,所得數稱為補碼。

正數的補碼與其原碼相同;負數的補碼是在其反碼的末位加1

反碼加1:1000 0000 0000 0000 0000 0000 000 1001;這樣就得負數的正值的補碼形式。也就是-9了。

參考:http://www.cnblogs.com/setsail/archive/2013/05/22/3093542.html

   http://my.oschina.net/WarRome/blog/90707

以上解釋自己也沒有看的太懂,但實踐得出$a+(~$a)=-1

小例如下:

<?php
$m=8;
$n=12;
$p=-109;
$mn=$m&$n;
echo $mn."<br>";
$mn=$m|$n;
echo $mn."<br>";
$mn=$m^$n;
echo $mn."<br>";
$mn=~$m;
echo $mn."<br>";
$mn=~$p;
echo $mn."<br>";
?>

輸出結果:

8
12
4
-9
108

關於按位取反的問題,再琢磨琢磨


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM