按位與(&),或(|),異或(^),取反(~),左移(<<),右移(>>)


C語言提供的位運算符列表:
運算符 含義 描述
& 按位與 如果兩個相應的二進制位都為1,則該位的結果值為1,否則為0
| 按位或 兩個相應的二進制位中只要有一個為1,該位的結果值為1
^ 按位異或 若參加運算的兩個二進制位值相同則為0,否則為1
~ 取反 ~是一元運算符,用來對一個二進制數按位取反,即將0變1,將1變0
<< 左移 用來將一個數的各二進制位全部左移N位,右補0
>> 右移 將一個數的各二進制位右移N位,移到右端的低位被舍棄,對於無符號數,高位補0

 

1. and(&)運算 (按位與)
  and運算通常用於二進制取位操作,例如一個數 and 1的結果就是取二進制的最末位。這可以用來判斷一個整數的奇偶,二進制的最末位為0表示該數為偶數,最末位為1表示該數為奇數.
  相同位的兩個數字都為1,則為1;若有一個不為1,則為0。
  00111
  11100
  (&或者and)
  ----------------
  00100
 2. or(|)運算 (按位或)
  or運算通常用於二進制特定位上的無條件賦值,例如一個數or 1的結果就是把二進制最末位強行變成1。如果需要把二進制最末位變成0,對這個數or 1之后再減一就可以了,其實際意義就是把這個數強行變成最接近的偶數。
  相同位只要一個為1即為1。
  00111
  11100
  (|或者or)
  ----------------
  11111
 3. xor(^)運算 (按位異或)
  異或的符號是⊕。
  xor運算通常用於對二進制的特定一位進行取反操作,因為異或可以這樣定義:0和1異或0都不變,異或1則取反。
  xor運算的逆運算是它本身,也就是說兩次異或同一個數最后結果不變,即(a xor b) xor b = a。xor運算可以用於簡單的加密,比如我想對我MM說1314520,但怕別人知道,於是雙方約定拿我的生日19880516作為密鑰。1314520 xor 19880516 = 20665500,我就把20665500告訴MM。MM再次計算20665500 xor 19880516的值,得到1314520,於是她就明白了我的企圖。
  相同位不同則為1,相同則為0。
  00111
  11100
  (^或者xor)
  ----------------
  11011

4.~取反就是如果是00111,則變為11000 (按位取反)

  ~是按位取反的意思.
57的二進制表示為(1個字節):00111001
按位取反后(~57)的二進制:  11000110 此表示為十進制:-70
這是一個負數,是有符號的數,負數在計算機里要用其補碼來表示:補碼=符號位以后按位取反再加1.
所以-70(11000110)符號位以后按位取反后為(10111001) 再加1 則為(10111010)
換成十進制為:-58
因此~57=-58

 

5.>>是右移位運算
右移1位即除以2;,並且取整。
m_Height>>4相當於:
m_Height/16

<<是左移位運算
若左移一位,則其數值變為 a*2

 

 

 

另外,這些位運算符,還可以像a+=b這樣寫,運算效果類似
int a = 1,b = 2,c = 4;//0x0001,0x0010,0x0100
a |= b;// a = 0x0011 = 3
b |= c;// b = 0x0110 = 6

參考:https://blog.csdn.net/zhongjling/article/details/8004103


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM