C 篇 位運算

2021-09-26 06:45:24 字數 1483 閱讀 7045

位運算的用處:

c/c++語言提供了六種位運算子來進行位運算操作:

& 按位與 (雙目)

| 按位或 (雙目)

^ 按位異或 (雙目)

~ 按位非(取反) (單目)

<< 左移 (雙目)

>> 右移 (雙目)

概念:

將參與運算的兩運算元各對應的二進位制位進行與操作,只有對應的兩個二進位均為1時,結果的對應二進位制位才為1,否則為0。

應用:

例如,如果需要將int型變數n的低8位全置成0,而其餘位不變,則可以執行:

n = n & 0xffffff00;

如何判斷乙個int型變數n的第7位(從右往左,從0開始數)是否是1 ?

只需看表示式 「n & 0x80」的值是否等於0x80即可

概念

將參與運算的兩運算元各對應的二進位制位進行或操作,只有對應的兩個二進位都為0時,結果的對應二進位制位才是0,否則為1。

作用:

按位或運算通常用來將某變數中的某些位置1且保留其他位不變。

例如:int型變數n的低8位全置成1,而其餘位不變,則可以執行:

n |= 0xff;

概念

將參與運算的兩運算元各對應的二進位制位進行異或操作,即只有對應的兩個二進位不相同時,結果的對應二進位制位才是1,否則為0。

異或運算的特點

:如果 a^b=c,那麼就有 c^b = a以及c^a=b。

另外異或運算還能實現不通過臨時變數,就能交換兩個變數的值:

int a = 5, b = 7;

a = a ^ b;

b = b ^ a;

a = a ^ b;

按位非運算子「~」是單目運算子。其功能是將運算元中的二進位制位0變成1,1變成0。

表示式:a << b的值是:將a各二進位全部左移b位後得到的值。左移時,高位丟棄,低位補0。a 的值不因運算而改變。

實際上,左移1位,就等於是乘以2,左移n位,就等於是乘以2的n次方。而左移操作比乘法操作快得多。

表示式:a >> b的值是:將a各二進位全部右移b位後得到的值。右移時,移出最右邊的位就被丟棄。 a 的值不因運算而改變。

對於有符號數,如long,int,short,char型別變數,在右移時,符號位(即最高位)將一起移動,並且大多數c/c++編譯器規定,如果原符號位為1,則右移時高位就補充1,原符號位為0,則右移時高位就補充0。

實際上,右移n位,就相當於左運算元除以2的n次方,並且將結果往小裡取整。

LeetCode總結 位運算篇

位運算一直程式設計和面試中的乙個必須準備的主題。不過現在面試中關於位運算的出現得不多,主要原因還是位運算太考察技巧了,很多時候很難在短時間內想出來,所以作為面試的題目顯得有點太花時間了。leetcode中關於位運算的題目有以下幾道 single number single number ii div...

位運算之技巧篇

只要根據最未位是0還是1來決定,為0就是偶數,為1就是奇數。因此可以用if a 1 0 代替if a 2 0 來判斷a是不是偶數。可以用位操作來實現交換兩數而不用第三方變數 void swap int a,int b 第一步 a b 即a a b 第二步 b a 即b b a b 由於 運算滿足交換...

C 位運算 示例

在c 中可以對整型運算物件按位進行邏輯運算。按位進行邏輯運算的意義是 依次取被運算物件的每個位,進行邏輯運算,每個位的邏輯運算結果是結果值的每個位。c 支援的位邏輯運算子如下表所示。運算符號 意義 運算物件型別 運算結果型別 物件數 例項 位邏輯非運算 整型,字元型 整型 1 a 位邏輯與運算 2 ...