c語言位運算
位運算應用口訣
清零取反要用與,某位置一可用或
若要取反和交換,輕輕鬆鬆用異或
移位運算
1 它們都是雙目運算子,兩個運算分量都是整形,結果也是整形。
2 」 < am
p;3"
amp;>amp;>amp;qu
ot;右
移:右邊
的位被擠
掉。對於
左邊移出
的空位,
如果是正
數則空位
補0,若
為負數,
可能補0
或補1,
這取決於
所用的計
算機系統
。4「 amp;>amp;>amp;>amp;
quot;運算子,右邊的位被擠掉,對於左邊移出的空位一概補上0。
位運算子的應用 (源運算元s 掩碼mask)
(1) 按位與– &
1 清零特定位 (mask中特定位置0,其它位為1,s=s&mask)
2 取某數中指定位 (mask中特定位置1,其它位為0,s=s&mask)
(2) 按位或– |
常用來將源運算元某些位置1,其它位不變。 (mask中特定位置1,其它位為0 s=s |mask)
(3) 位異或– ^
1 使特定位的值取反 (mask中特定位置1,其它位為0 s=s^mask)
2 不引入第三變數,交換兩個變數的值 (設 a=a1,b=b1)
目 標 操 作 操作後狀態
a=a1^b1 a=a^b a=a1^b1,b=b1
b=a1^b1^b1 b=a^b a=a1^b1,b=a1
a=b1^a1^a1 a=a^b a=b1,b=a1
二進位制補碼運算公式:
-x = ~x + 1 = ~(x-1)
~x = -x-1
-(~x) = x+1
~(-x) = x-1
x+y = x - ~y - 1 = (x |y)+(x&y)
x-y = x + ~y + 1 = (x |~y)-(~x&y)
x^y = (x |y)-(x&y)
x |y = (x&~y)+y
x&y = (~x |y)-~x
x==y: ~(x-y |y-x)
x!=y: x-y |y-x
x < y: (x-y)^((x^y)&((x-y)^x))
x <=y: (x |~y)&((x^y) |~(y-x))
x < y: (~x&y) |((~x |y)&(x-y))//無符號x,y比較
x <=y: (~x |y)&((x^y) |~(y-x))//無符號x,y比較
應用舉例
(1) 判斷int型變數a是奇數還是偶數
a&1 = 0 偶數
a&1 = 1 奇數
(2) 取int型變數a的第k位 (k=0,1,2……sizeof(int)),即a
amp;>amp;$gt;k&1
(3) 將int型變數a的第k位清0,即a=a&~(1 <
c語言位運算
c語言提供的位運算子列表 運算子 含義 描述 按位與 如果兩個相應的二進位制位都為1,則該位的結果值為1,否則為0 按位或 兩個相應的二進位制位中只要有乙個為1,該位的結果值為1 按位異或 若參加運算的兩個二進位制位值相同則為0,否則為1 取反 是一元運算子,用來對乙個二進位制數按位取反,即將0變1...
C語言位運算
位運算是指按二進位制進行的運算。在系統軟體中,常常需要處理二進位制位的問題。c語言提供了6個位操作 運算子。這些運算子只能用於整型運算元,即只能用於帶符號或無符號的char,short,int與long型別。c語言提供的位運算子列表 運算子 含義 描述 按位與 如果兩個相應的二進位制位都為1,則該位...
C語言位運算
按位左移 左移 原值 1101 左移2位後為110100 2 5 2 4 2 2 32 16 4 52 按位與 同為1 則為1,否則為0 按位或 有1則為1,否則為0 按位亦或 相同為0,不同位1 按位取反 一元運算子 int c 2 0010 int d 10 1010 按位與 同為1 則為1,否...