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