a & b
只有兩個數所在的位都是1,才等於1,否則為0;
用處:
改變乙個數某乙個位為0,其他位不變;(如a & 0xfe,最後一位變為0,其他位不變)
a =
1010
0111
a &1111
1110
=1010
0110
取乙個數的某一段;(如b & 0xff,可以得到b最後8位的值)
b =
1111..
.1111
1010
1010
b &1111
1111
=0000..
.0000
1010
1010
a | b
兩個數有乙個數所在的位上是1,則為1,否則為0;
用處:
使得某乙個位上或幾個位上的數為1,其他位不變;(如a | 0x01,使a最後一位上的數為1,其他位不變)
a =
0101
0100
a |0000
0001
=0101
0101
使兩個數拼接起來;(如0x00ff | 0xff00 = 0xffff) ~a
使這個數上的每一位1變成0,0變成1;
用處:
得到全部為1的數;(~0)
使連續某幾位變為0/1;(如7是0x0111,a | (7)使得a的後三位變為1,a & (-7)使得a的後三位變為0)
a ^ b
兩個數,如果相同位上的數相等,結果為0,不相等結果為1;
用處:
如果兩個數相等,那麼a ^ b = 0;
用乙個變數對同乙個值異或兩次,等於沒做,又變回原來的數;(a ^ b ^ b = a)
左移(i《右移(i>>j)
i中所有位向右移j位,當資料i為unsigned型別時,左邊缺位補0,當資料i為signed型別時,左邊填入原來的做高位(保持符號不變);
所有小於int的型別,移位以int的方式來做,結果是int;
x >>= 1,相當於x /= 2;
x >>= n,相當於x /= 2^n;
#示例**
int a =
0x80000000
;unsigned
int b =
0x80000000
;printf
("a<<1 = %x\n"
, a<<1)
;printf
("a>>1 = %x\n"
, a>>1)
;printf
("b<<1 = %x\n"
, b<<1)
;printf
("b>>1 = %x\n"
, b>>1)
;
#結果
a<<1=
0a>>
1= c0000000
b<<1=
0b>>1=
40000000
c語言位運算
c語言提供的位運算子列表 運算子 含義 描述 按位與 如果兩個相應的二進位制位都為1,則該位的結果值為1,否則為0 按位或 兩個相應的二進位制位中只要有乙個為1,該位的結果值為1 按位異或 若參加運算的兩個二進位制位值相同則為0,否則為1 取反 是一元運算子,用來對乙個二進位制數按位取反,即將0變1...
C語言位運算
c語言位運算 位運算應用口訣 清零取反要用與,某位置一可用或 若要取反和交換,輕輕鬆鬆用異或 移位運算 1 它們都是雙目運算子,兩個運算分量都是整形,結果也是整形。2 am p 3 amp amp amp qu ot 右 移 右邊 的位被擠 掉。對於 左邊移出 的空位,如果是正 數則空位 補0,若 ...
C語言位運算
位運算是指按二進位制進行的運算。在系統軟體中,常常需要處理二進位制位的問題。c語言提供了6個位操作 運算子。這些運算子只能用於整型運算元,即只能用於帶符號或無符號的char,short,int與long型別。c語言提供的位運算子列表 運算子 含義 描述 按位與 如果兩個相應的二進位制位都為1,則該位...