位運算總結

2021-06-23 06:40:03 字數 1933 閱讀 3889

一 優先順序(高—〉低)

! ~  算術運算子 關係運算子 & ^ | && || 賦值

二 移位運算  <<   >;>;

要點 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 按值...