位運算

位運算

首先,先明確一下一個概念:位運算是通過二進制進行操作的。

首先來認識一下幾個位運算的符號。

符號

名稱

&

與運算(and

|

或運算(huo

<< 

左移

>> 

右移

~

取反

^

異或

&

    這個就是比較兩個二進制數,只有在這兩個數的第i位同時是1時,答案的第i位就變成1。也就是說在這一位上,只有兩個都是1,答案才能是1

|

    這個或運算有點像&,但是它是只要在第i位上兩個數中有1個是1,那麼答案就是1.

<<

這個就是把一個數轉換成二進制後,整體向左移i位,剛補進來的都爲0

>>

    這個有點像>>,不過它是向右移。也就是把一個數轉換成二進制後,整體向右移i位。

~

    這個就是在二進制中,把所有1變成0,把所有0變成1

^

    這個就是比較兩個二進制數,如果第i位相同,那麼答案的第i位就是0,否則就是1

下面就編一個程來更加了解位運算吧!

/*

    ——20158610:34:49

*/

 

#include <iostream>

using namespace std;

 

long long a=7; /*00000111*/

long long b=4; /*00000100*/

 

int main()

{

   cout<<"& :"<<(a&b)<<endl;

/*

   a: 00000111      兩數同位1答案1

   b: 00000100

   ______________

      00000100  ------ 4

*/

   cout<<"| :"<<(a|b)<<endl;

/*

   a: 00000111      兩數同位有一位1答案1

   b: 00000100

   ______________

      00000111 ------7

*/

   cout<<"<<:"<<(a<<1)<<endl;

/*

   a: 00000111  a<<n

   <==  左移n

   a: 00001110  ------14

*/

  

   cout<<">>:"<<(a>>1)<<endl;

/*

   a: 00000111  a>>n

   ==>  右移n

   a: 00000011  ------3

            注意最後一位的1右移之後就    

*/

   cout<<"~ :"<<(~a)<<endl;

/*

   a: 00000111

   ~a: 11111000 ------  -8 (裏是負數是因位也被取反了

            的每一位如果是10,如果是01

   

*/

   cout<<"^ :"<<(a^b)<<endl;

/*

   a: 00000111      兩數同位相同時時答案0,否則爲 1

   b: 00000100

   ______________

      00000011 ------3

*/

   return 0;

}


運行出來的結果是這樣的:

位運算 - 周正華 - 周正華的博客

 

這個也有需要注意的:位運算是在二進制的環境下操作的,而二進制最高位爲符號位,即進行位操作時可能會把符號改變了。

 

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