C語言第五篇:位運算

qq_30866297發表於2016-03-23


一、概念辨析:區分C語言中的邏輯運算和位運算


1、邏輯運算:


C語言中提供了三種邏輯運算子:

  • &&           與運算     雙目運算子     左結合性     
  • ||              或運算     雙目運算子     左結合性
  • !               非運算     單目運算子     右結合性

應用場合:用於條件語句


2、位運算:


C語言提供了六種位運算子:

  • (1) &          按位與            
  • (2) |            按位或              
  • (3) ^           按位異或                
  • (4) ~           取反           
  • (5) <<         左移

運演算法則:x << y——將x左移y位,將x最左邊的y位丟棄,在右邊補y個0。對於signed和unsigned是相同的

  •  (6) >>        右移  

運演算法則:x >> y——將x右移y位,這需要區分x是有符號數還是無符號數,具體情況如下:

  • a、在x是無符號數時,只需將x的最右邊的y位丟棄,在左邊補上y個0;
  • b、在x是有符號正數時,同無符號數的處理相同;
  • c、在x是有符號負數時,將將x的最右邊的y位丟棄,在左邊補上y個1。

應用場合:用於二進位制運算


3、邏輯運算和位運算的區別(以邏輯與和按位與為例)


對於兩個邏輯量,都是一樣的;

對於兩個整型量,就不一樣了,例如,對2和1進行邏輯與和按位與運算:

  • 2&&1=1
  • 2&1=0   


二、位運算的使用


1、優秀程式設計師不得不知的20個位運算技巧


在本篇部落格所舉得例子中,完成相應功能的C語言程式碼都僅僅是一行位運算搞定。此處僅列出標題,以對該片博文的作者致敬。
  • (1)獲得int型最大值
  • (2)獲得int型最小值
  • (3)獲得long型最大值
  • (4)乘以2運算
  • (5)除以2運算
  • (6)乘以2的m次方
  • (7)除以2的m次方
  • (8)判斷一個數的奇偶性
  • (9)不用臨時變數交換兩個數
  • (10)取絕對值
  • (11)取兩個數的最大值
  • (12)取兩個數的最小值
  • (13)判斷符號是否相同
  • (14)計算n的二次方
  • (15)判斷一個數是不是2的冪
  • (16)對2的n次方取餘
  • (17)求兩個整數的平均值
  • (18)從低位到高位,取n的m位
  • (19)從低位到高位,將n的第m位置1
  • (20)從低位到高位,將n的第m位置0
  • (21)另:計算n+1,計算n-1,取相反數,
  • (22)sign函式,引數為n,當n>0時候返回1,n<0時返回-1,n=0時返回0。

另一篇參考博文:C/C++位運算技巧


2、位運算實現加法







相關文章