神馬是位運算?
程序中的所有數在計算機中都是以二進制形式儲存的,位運算就是對整數在內存中的二進制位進行直接的操作。 比如and是一個邏輯運算符,但整數和整數之間可以進行and運算,比如 6的二進制是 110, 11的二進制是1011,那麼。6 and 11的結果就是2.
它在二進制中是這樣表示的:
110
and 1011
=========
0010 -》 2
由於位運算直接對內存數據進行操作,不需轉成十進制,所以處理速度非常快,這個快的用處有沒有實際意義呢?我暫時還不知道,繼續讀下去。
C/C++中的位運算符號
需要注意的是,邏輯運算與位運算是有很大區別的
and 和 or運算學過離散數學或者計算機組成原理的童鞋應該很容易理解,下面講xor:
xor運算,也就是 ^ 運算,通常對於二進制的特定一位進行取反操作,因爲異或可以這樣定義:0和1都不變,異或1則取反、
這個運算的你運算是它本身,也就是說兩次異或同一個數之後結果不變
也就是 (a ^ b) ^ b = a
然後學習到這裏
就可以看到一個很有趣的交換功能不需要用多一個變量
a = a xor b;
b = a xor b;
a = a xor b;
用c/c++就可以這樣表示了
然後是 ~ not運算,就是所有0或1進行取反
下面是一個例子
a: 00010
~a:11101
用程序表示
用不同的類型的數據所出來的結果都是不一樣的,因爲每種數據類型的長度都是不一樣的