C C 位運算詳解及用途

2021-10-25 12:13:49 字數 2850 閱讀 1226

c/c++位運算詳解及相關作用。

運算子含義描述

& 按位與

如果兩個相應的二進位制位都為1,則該位的結果值為1,否則為0

i 按位或

兩個相應的二進位制位中只要有乙個為1,該位的結果值為1

^ 按位異或

如果參加運算的兩個二進位制位值相同則為0,否則為1

~ 取反

~是一元運算子,用來對乙個二進位制數按位取反,即將0變1,將1變0

<< 左移

用來將乙個數的各二進位制位全部左移n位,右補0

>> 右移

將乙個數的各二進位制位右移n位,移到右端的低位被捨棄,對於無符號數,高位補0

(1)清零

若想對乙個儲存單元清零,即使其全部二進位制位為0,只要找乙個二進位制數,其中各個位符合一下條件:原來的數中為1的位,新數中相應位為0。然後使二者進行&運算,即可達到清零目的。

例:原數為43,即00101011,另找乙個數,設它為148,即10010100

將兩者按位與運算:

00101011 & 10010100,得00000000

(2)取乙個數中某些指定位

若有乙個整數a(2byte),想要取其中的低位元組,只需要將a與8個1按位與即可。

a 00101100 10101100 & b 00000000 11111111,得c 00000000 10101100

(3)保留指定位:

與乙個數進行「按位與」運算,此數在該位取1。

例如:有一數84,即01010100,想把其中從左邊算起的第3,4,5,7,8位保留下來.

運算如下:

01010100 & 00111011,得 00010000

即:a=84,b=59

c=a&b=16

(4)判斷奇偶

只要根據最末位是0還是1即可判斷整數的奇偶性。例如整數n,可以用if((n & 1) == 0)來判斷,要比if(n % 2 == 0)判斷奇偶性效率高。

(5)判斷乙個整數是不是2的整數次方

如果乙個整數是2的整數次方,那麼它的二進位制標識中一定有且只有一位是1,而其他所有位均為0.

解決方案:

把這個整數減去1之後再和本身做與運算,這個整數中唯一的乙個1就會變成0.所以只要判斷是不是等於0即可。

(1)按位或運算常用來對乙個資料的某些位定值為1

如果想使乙個數a的低4位改為1,則只需要將a與15進行按位或運算即可。

(1)使特定位翻轉

設有數01111010,想使其低4位翻轉,即1變0,0變1。可以將其與00001111進行「異或」運算。

即:01111010 ^ 00001111,得01110101

運算結果的低4位正好是原數低4位的翻轉。可見,要使哪幾位翻轉就將與其進行∧運算的該幾位置為1。

(2)與0相「異或」,保留原值

例如:012 ^ 00=012

00001010 ^ 00000000,得00001010

因為原數中的1與0進行異或運算得1,0^0得0,故保留原數。

(3) 交換兩個值,不用臨時變數

例如:a=3,即11;b=4,即100。

想將a和b的值互換,可以用以下賦值語句實現:

a=a∧b;

b=b∧a;

a=a∧b;

a=011

(∧)b=100

a=111(a∧b的結果,a已變成7)

(∧)b=100

b=011(b∧a的結果,b已變成3)

(∧)a=111

a=100(a∧b的結果,a已變成4)

等效於以下兩步:

① 執行前兩個賦值語句:「a=a∧b;」和「b=b∧a;」相當於b=b∧(a∧b)。

② 再執行第三個賦值語句: a=a∧b。由於a的值等於(a∧b),b的值等於(b∧a∧b),因此,相當於a=a∧b∧b∧a∧b,即a的值等於a∧a∧b∧b∧b,等於b。

(4) 快速判斷兩個值是否相等

例如:判斷兩個整數a = 1,b = 1是否相等,則可通過異或實現。

一元運算子,用於求整數的二進位制反碼(變換符號),即分別將運算元各二進位制位上的1變為0,0變為1。

例如:~77變77。

左移運算子是用來將乙個數的各二進位制位左移若干位,移動的位數由右運算元指定(右運算元必須是非負值),其右邊空出的位用0填補,高位左移溢位則捨棄該高位。

左移1位相當於該數乘以2,左移2位相當於該數乘以2*2=4,15<<2=60,即乘了4。但此結論只適用於該數左移時被溢位捨棄的高位中不包含1的情況。

右移運算子是用來將乙個數的各二進位制位右移若干位,移動的位數由右運算元指定(右運算元必須是非負值),移到右端的低位被捨棄,對於無符號數,高位補0。

*注意:*對無符號數,右移時左邊高位移入0;對於有符號的值,如果原來符號位為0(該數為正),則左邊也是移入0。如果符號位原來為1(即負數),則左邊移入0還是1,要取決於所用的計算機系統。有的系統移入0,有的系統移入1。移入0的稱為「邏輯移位」,即簡單移位;移入1的稱為「算術移位」。

結合:《左移運算子與《左移運算子相關應用

(1)高低位互換

給出乙個16位的無符號整數。稱這個二進位制數的前8位為「高位」,後8位為「低位」。現在寫一程式將它的高低位交換。例如,數34520用二進位制表示為:

10000110 11011000

將它的高低位進行交換,我們得到了乙個新的二進位制數:

11011000 10000110

它即是十進位制的55430。

這個問題用位操作解決起來非常方便,設x=34520=10000110 11011000(二進位制) 由於x為無符號數,右移時會執行邏輯右移即高位補0,因此x右移8位將得到00000000 10000110。而x左移8位將得到11011000 00000000。可以發現只要將x>>8與x<<8這兩個數相或就可以得到1101100010000110。

位運算 用途

在 中我們常會看到位運算 位運算是一種高效的運算機制,利用二進位制來進行 資料型別 byte 8 boolean 8 short 16 int 32 long 64 float 32 double 64 char 16 4 用 二進位制表示 0000 0000 0000 0000 0000 0000...

C C 位操作 位運算

在c語言中,可以單獨操控變數的位 bit 一般高階語言不會處理這級別的細節,c在提供高階語言便利的同時,還能為組合語言所保留的級別上工作,這使其成為編寫裝置驅動程式和嵌入式 的首選語言。目錄 二進位制整數 binary 有符號整數 八進位制 octal 十六進製制 hex 位運算子 按位與 的用途 ...

C C 常見位運算

左移運算子 右移運算子 無符號右移運算子 按位與 按位或 按位非 按位異或,相同位為0,不相同為1 判斷x是奇數還是偶數 x 1 0 x乘以乙個2的n次方的數 x n 消去x最後一位的1 x x 1 求x的相反數 x 1 或者 x 1 x的異或操作 x x 1 把x從右邊數第n位變1 x 1 n 1...