大佬些就常用這些啊!總結一下總會用到的:
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交換兩個整數
voidswap
(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...