C語言 位運算

2021-08-25 13:22:18 字數 2241 閱讀 8741

1. 基礎知識

運算子 含義 運算子 含義

& 按位與 ~ 取反

| 按位或 << 左移

∧ 按位異或 >> 右移

注意:

(1)位運算子中除~以外,均為二目(元)運算子,即要求兩側各有乙個運算量。

(2)運算量只能是整型或字元型的資料,不能為實型資料。

按位與的使用技巧:

(1)清0. 若想對乙個儲存單元清零,即使其全部二進位制位為0,只要找乙個二進位制數,其滿足原來數中為1的位,新數中相應位為0.然後讓二者進行&運算。

(2)取指定位。如取整數a(2個位元組)的底8位,只需要將a與8個1按位與即可。

按位或使用技巧。

(1)用來對乙個資料的某些位定值為1.

按位異或使用技巧。

(1)與1異或,特定位翻轉。設有01111010,想使其低4位翻轉,即1變為0,0變為1。可以將它與00001111進行∧運算。

(2)與0異或,保留原值。

(2)不用臨時變數,交換兩個值。

例如:a=3,b=4。

想將a和b的值互換,可以用以下賦值語句實現:

a=a∧b;

b=b∧a;

a=a∧b;

左移使用技巧。

(1)左移1位相當於該數乘以2,左移2位相當於該數乘以4,15<<2=60,即乘了4。但此結論只適用於該數左移時被溢位捨棄的高位中不包含1的情況。

右移使用技巧。

(1)右移相當於數除以2(算術右移).

(2)對無符號數,右移時左邊高位移入0;對於有符號的值,如果原來符號位為0(該數為正),則左邊也是移入0。如果符號位原來為1(即負數),則左邊移入0還是1,要取決於所用的計算機系統。有的系統移入0,有的系統移入1。移入0的稱為「邏輯右移」,即簡單右移;移入1的稱為「算術右移」。

2. 例題

例1, 取乙個整數a從右端開始的4-7位。(假設a是16位整數)

解答:#include

void main()

{ unsigned a,b,c,d;

scanf(「%o」,&a);

b=a>>4;

c=~(~0<<4);

d=b&c;

printf(「%o,%d/n%o,%d/n」,a,a,d,d); }

例2,對乙個整數a實現迴圈右移。

解答:#include

void main()

{ unsigned a,b,c;

int n;

scanf(「a=%o,n=%d」,&a,&n);

b=a<<(16-n);

c=a>>n;

c=c|b;

printf(「%o/n%o」,a,c); }

應用:

考慮乙個ip位址用unsigned long表示,那麼該如何得到這個ip位址呢?或者

給定乙個ip位址,如何用unsigned long 表示出來呢?

解答:(1.1)

unsigned long ip;

unsigned short int first,second,third,fourth;

scanf("%l",&ip);

first=(ip>>24)& ~(~0 << 8);

second=(ip>>16)& ~(~0 << 8);

third=(ip>>8)& ~(~0 << 8);

fourth=ip& ~(~0 << 8);

(1.2)

unsigned long ip;

unsigned short int first,second,third,fourth;

scanf("%l",&ip);

char *p;

p=(char *)&ip;

first=(unsigned short int

)p[0];

second=(unsigned short int

)p[1];

third=(unsigned short int)p[2];

fourth=(unsigned short int)p[3];

(2)unsigned long ip=0;

ip|=first;

ip<<=8;

ip|=second;

ip<<=8;

ip|=third;

ip<<=8;

ip|=fourth;

printf("the ip can berepresentedby unsigned long as:%l",ip);

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