& 按位與
用例資料清零
01011010 & 00000000 = 0
資料取高位元組or低位元組
01011010 & 00001111 = 00001010(取低4位)
資料取某指定位
01011010 & 01010110 = 01010000(取1/2/4/6位)
l 按位或
用例暫存器資料原位不變,只把某位置為1
01110010 l 00001100 = 01111110(置2/3位為1)
^ 異或
用例位與1異或為取反
1010 ^ 1111 = 0101
位與0異或為保留原值
1010 ^ 0000 = 1010
1.判斷n為奇偶數。
if
(n &1)
printf
("奇數");
//n&1為1,則n為奇數
else
printf
("偶數");
//n&1為0,則n為奇數
int n=30;
n>>=1;
printf
("%d\n"
,n);
//右移一位為該資料除2,n輸出15。
n<<=1;
printf
("%d\n"
,n);
//左移一位為該資料乘2,n輸出30。
3.不開闢新空間交換a和b的值
int a=
3,b=4;
a^=b;
//a*=a^b
b^=a;
//b*=b^a*=b^a^b=a^b^b=a^0=a
a^=b;
//a=a*^b*=a^b^a=b^a^a=b
printf
("a=%d,b=%d\n"
,a,b)
;
4.不用判斷語句求n的絕對值
int n=
-9527
;//無論n=正還是負,最後temp都輸出正
int temp = n >>31;
printf
("%d\n"
,(n ^ temp)
- temp)
;//輸出9527
左運算子
右移運算子
<<
>>
低位補零
高位補零
注意:c中沒有迴圈左右移,要通過**實現
5迴圈左右移
unsigned
rol(
unsigned val,
int size)
//迴圈左移
unsigned
ror(
unsigned val,
int size)
//迴圈右移
void
show
(int temp)
//十進位制轉為二進位制輸出
;int count=
0,i=0;
dowhile
(temp>=1)
;for
(i=31
;i>=
0;i--
)printf
("\n");
}int
main()
結果:
C語言之位運算子
位運算子分析 1.c語言中的位運算子 c語言中的位運算子直接對bit位進行操作,其效率最高。速度快於四則運算和邏輯運算。2.左移和右移的注意點 左運算元必須為整數型別 char和short被隱式轉換為int後進行移位操作 右運算元的範圍必須為 0,31 左移運算子 將運算數的二進位制位左移 規則 高...
C語言之位移位運算子和按位運算子
近期做串列埠實驗,遇到將十六進製制轉換成char型字元的問題,程式中用到了位移位運算子和按位或運算子 a.位移位運算子 左移,右移 運算子左邊為移位物件,右邊為要移的位數。移位物件為整數值 若 char a 61,則 a 也可以作為移位物件,若 char a a 則會出錯。總之,你要移的物件一定是乙...
C語言之運算子 (筆記)
下表顯示了 c 語言支援的所有算術運算子。假設變數 a 的值為 10,變數 b 的值為 20,則 運算子描述例項 把兩個運算元相加 a b 將得到 30 從第乙個運算元中減去第二個運算元 a b 將得到 10 把兩個運算元相乘 a b 將得到 200 分子除以分母 b a 將得到 2 取模運算子,整...