一 優先順序(高—〉低)
! ~ 算術運算子 關係運算子 & ^ | && || 賦值
二 移位運算 << >;>;
要點 1 它們都是雙目運算子,兩個運算分量都是整形,結果也是整形。
2 左移:右邊空出的位上補0,左邊的位將從字頭擠掉,其值相當於乘2。
3 右移:右邊的位被擠掉。對於左邊移出的空位,如果是正數則空位補0,若為負數,可能補0或補1,這取決於所用的計算機系統。
移入0的叫邏輯右移,移入1的叫算術右移,turbo c採用邏輯右移。
三 位運算子的應用 (源運算元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
四 位運算應用口訣
清零取反要用與,某位置一可用或
若要取反和交換,輕輕鬆鬆用異或
五 應用舉例
(1) 判斷int型變數a是奇數還是偶數
|- 0 偶數
a&1=|
|- 1 奇數
(2) 取int型變數a的第k位 (k=0,1,2……sizeof(int))
a>;>;k&1
(3) 將int型變數a的第k位清0
a=a&~(1<
(4) 將int型變數a的第k位置1
a=a|(1<
(5) int型變數迴圈左移k次
a=a<;>;16-k (設sizeof(int)=16)
(6) int型變數a迴圈右移k次
a=a>;>;k|a<<16-k (設sizeof(int)=16)
六 例題
c primer plus 書上的題,將整數轉換二進位制串以及反轉整數後n位
#include "stdafx.h"
#include"stdio.h"
char *itobs(int n, char *ps);
void show_bstr(const char *);
int invert_end(int num, int bits);
int _tmain(int argc, _tchar* argv)
puts("bye!");
return 0;
}char *itobs(int n, char *ps)
void show_bstr(const char *str)
}//反轉數最後n位
int invert_end(int num, int bits)
return num^mask;
}
1 實現乙個函式itob(),使用移位運算將從鍵盤上輸入的整數轉換為它的二進位制表示形。
解: char * itob(int n,char *ps)
2 編寫乙個函式 invert_end(),反轉乙個值中最後n位,並將結果返回。
解: int invert_end(int num,int bits)
return num^mask;}
位運算總結
位運算是指按二進位制進行的運算。在系統軟體中,常常需要處理二進位制位的問題。c語言提供了6個位操作 運算子。這些運算子只能用於整型運算元,即只能用於帶符號或無符號的char,short,int與long型別。c語言提供的位運算子列表 運算子 含義 描述 按位與 如果兩個相應的二進位制位都為1,則該位...
位運算總結
位運算是指按二進位制進行的運算。在系統軟體中,常常需要處理二進位制位的問題。c語言提供了6個位操作 運算子。這些運算子只能用於整型運算元,即只能用於帶符號或無符號的char,short,int與long型別。c語言提供的位運算子列表 運算子 含義 描述 按位與 如果兩個相應的二進位制位都為1,則該位...
位運算總結, , , , , ,
位運算操作符介紹 運算子 a b是將兩個表示式的值按二進位制位展開,對應的位 bit 按值進行 與 運算,結果保留在該位上。如果兩數字數不同,則較短數高位補零,再運算。9 8 轉換成二進位制 1001 1000 結果是1000 運算子 a b是將兩個表示式的值按二進位制位展開,對應的位 bit 按值...