位運算基礎:入門

神馬是位運算?

 

   程序中的所有數在計算機中都是以二進制形式儲存的,位運算就是對整數在內存中的二進制位進行直接的操作。 比如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

 

用程序表示 


 

 

 

用不同的類型的數據所出來的結果都是不一樣的,因爲每種數據類型的長度都是不一樣的

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章