C C 中常用位運算總結

2021-09-01 15:37:23 字數 1889 閱讀 7940

大佬些就常用這些啊!總結一下總會用到的:

inline int ind(int xcell, int ycell, int zcell) const

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

&比較實用的例子:

比如我們經常要用的是否被2整除,一般都寫成   if(n % 2 == 0)

可以換成 if((n&1) == 0)

2.|

如果兩個相應的二進位制位只要有乙個是1,結果就是1;否則為0

可以用乙個unsigned int 來儲存多個布林值。比如乙個檔案有讀許可權,寫許可權,執行許可權。看起來要記錄3個布林值。我們可以用乙個unsigned int也可以完成任務。

乙個數r來表示讀許可權,它只更改個位來記錄讀許可權的布林值

00000001  (表示有讀許可權)

00000000  (表示沒有讀許可權)

乙個數w表示寫許可權,它只用二進位制的倒數第二位來記錄布林值

00000010 (表示有寫許可權)

00000000 (表示沒有寫許可權)

乙個數x表示執行許可權,它只用倒數第三位來記錄布林值

00000100 (表示有執行許可權)

00000000 (表示沒有執行許可權)

那麼乙個檔案同時沒有3種許可權就是

~r | ~ w | ~ x 即為 00000000,就是0

只有讀的許可權就是

r | ~w | ~x 即為 00000001,就是1

只有寫的許可權就是

~r | w | ~x 即為 00000010,就是2

乙個檔案同時有3種許可權就是

r | w | x 即為 00000111,就是7

3 <<向左移

相當於二進位制的每個數都變成當前值的兩倍,結果就是變成當前值的兩倍。

n * 2 == (n << 1)

推廣下就是(注意可能會溢位)

4 >>向右位移

比較實用的例子是:

int n = n / 2等價於 int n = n >> 1  等價於 int n >>= 1

5. ^異或

兩個相同的數會變成0,反之是1

例子:11^3 = 8

00001011

^   00000011

=   00001000 = 8

我覺得理解異或,一定要用異或來解下面的題目:

就是乙個陣列中,所有數字都出現了兩次,只有乙個沒有

比如 int t = 要找到5。

用異或就完美了,所有相同的都會消失,留下來的就是5了。我發現異或是嫉妒成雙成對的。

int singlenumber(int a, int n)
return a[0];
}
還有就是用不tmp值來交換兩個數

//不用temp交換兩個整數
void

swap

(int

& x ,

int& y)

有關面試中常見位運算總結

int numberof 1 int n return count int is 2n int n 1 求這兩個數的異或 兩個數不同的位置都為1,這些位置都需要改變 2 統計異或結果中1的個數 int stepchangeto int m,int n int add int num1,int num...

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...