位元運算集錦

來源:互聯網
上載者:User

文中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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.