一開始以為php中的取反運算就是簡單的把乙個數的二進位制中0變成1,1變成0這麼簡單,結果,大錯特錯。如:
<?php
$a = 8;
echo ~$a;
?>
如果按照我的想法,結果應該是這樣:
//8的二進位制
0000 0000 0000 0000 0000 0000 0000 1000
//取反
1111 1111 1111 1111 1111 1111 1111 0111
//轉十進位制
4294967287
這是乙個很大的數,很不正常。其實不是就這麼簡單的取反一下就完了,正確的應該是這樣:
//8的二進位制
0000 0000 0000 0000 0000 0000 0000 1000
//取反 從左到右看,第一位1表示負數 0表示正數
1111 1111 1111 1111 1111 1111 1111 0111
//上面第一位是1表示負數,則再進行取反然後+1
0000 0000 0000 0000 0000 0000 0000 1001
//然後轉成十進位制,前面加個負數符號
-9
如果第一次取反後是正數,則直接計算取反後的十進位制就行了。
手冊上是這樣說的:
$a << $b shift left(左移) 將 $a 中的位向左移動 $b 次(每一次移動都表示「乘以 2」)。
$a >> $b shift right(右移) 將 $a 中的位向右移動 $b 次(每一次移動都表示「除以 2」)。
注意後面括號裡的解釋,「每一次移動「 如:
$a = 2;
//左移兩次,第一次移動 2*2結果為4,第二次移動 4*2 結果為8
echo $a << 2;
右移跟左移一樣。 C語言位運算子 與 或 異或 取反 左移和右移
位運算是指按二進位制進行的運算。在系統軟體中,常常需要處理二進位制位的問題。c語言提供了6個位操作運算子。這些運算子只能用於整型運算元,即只能用於帶符號或無符號的char,short,int與long型別。c語言提供的位運算子列表 運算子 含義 描述 按位與 如果兩個相應的二進位制位都為1,則該位的...
C語言位運算子 與 或 異或 取反 左移和右移
語言位運算子 與 或 異或 取反 左移和右移 位運算是指按二進位制進行的運算。在系統軟體中,常常需要處理二進位制位的問題。c語言提供了6個位操作運算子。這些運算子只能用於整型運算元,即只能用於帶符號或無符號的char,short,int與long型別。c語言提供的位運算子列表 運算子 含義 描述 按...
C語言位運算子 與 或 異或 取反 左移和右移
c語言位運算子 與 或 異或 取反 左移和右移 語言位運算子 與 或 異或 取反 左移和右移 位運算是指按二進位制進行的運算。在系統軟體中,常常需要處理二進位制位的問題。c語言提供了6個位操作運算子。這些運算子只能用於整型運算元,即只能用於帶符號或無符號的char,short,int與long型別。...