文中2'k代表2的k次方
1 除以2的k次冪可以用位元運算:
n/2'k == n>>k
2 對2的k次冪取餘數可以用位元運算:
n%2'k == n & ((1<<k)-1)
比如 100%32
100的二進位為 1100100
((1<<5)-1)等於31為 0011111
兩個數相與即得 100,故
100%32 = 4
3 對於整數n,從低位開始,把它的第k位(0<=k<=31)置為1的操作為:
n = n | (1<<k)
4 對於整數n,從低位開始,把它的第k位(0<=k<=31)置為0的操作為:
n = n & ~(1<<k)
5 對於整數n,從低位開始,測試它的第k位(0<=k<=31)是否為1,若為1,返回一個大於0的數,否則返回0
return n & (1<<k)
6 對於整數n,判斷它是奇數還是偶數
若n & 1大於0,則n是奇數,否則n是偶數
7 對於整數n,若n是奇數,則把n減1變成偶數,若n是偶數,則把n加1變成奇數
n = n ^ 1
8 對於奇數n,有如下性質
(n-1) ^ n ==1
9 最大的int
01 1111111111 1111111111 1111111111
MAX_INT = ~(1<<31)
10 最小的int
10 0000000000 0000000000 0000000000
MIN_INT = (1<<31)
11 把最低位的1變為0
比如: 111000 ---> 110000
n = n - (n&-n)
12 判斷兩個整數數是否同號
#define MASK 0x80000000
flag = (x & MASK) ^ (y & MASK)
如果flag為0,說明不同號,否則同號
13 交換兩個值,不用臨時變數
想將a和b的值互換,可以用以下指派陳述式實現:
a=a∧b;
b=b∧a;
a=a∧b;
14 bitset的C語言實現
[轉] http://kenby.iteye.com/blog/1011480