C語言之位運算子的妙用 持續總結 防備忘

2021-10-02 08:16:34 字數 1820 閱讀 4984

& 按位與

用例資料清零

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 取模運算子,整...