PHP學習手冊四 取反運算和左移 右移運算

2021-09-12 10:48:39 字數 998 閱讀 8681

一開始以為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型別。...