C語言 位運算

2021-10-21 21:07:14 字數 1646 閱讀 9282

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,則該位...