位運算集錦

2021-08-25 19:20:15 字數 1447 閱讀 4435

文中2'k代表2的k次方

1 除以2的k次冪可以用位運算:

n/2'k == n>>k

2 對2的k次冪取餘數可以用位運算:

n%2'k == n & ((1<

比如 100%32

100的二進位制為          1100100

((1<<5)-1)等於31為  0011111

兩個數相與即得 100,故

100%32 = 4

3 對於整數n,從低位開始,把它的第k位(0<=k<=31)置為1的操作為:

n = n | (1<

4 對於整數n,從低位開始,把它的第k位(0<=k<=31)置為0的操作為:

n = n & ~(1<

5 對於整數n,從低位開始,測試它的第k位(0<=k<=31)是否為1,若為1,返回乙個大於0的數,否則返回0

return  n & (1<

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語言實現

#include #include #define n 4000000000

#define shift 5

#define mask 0x1f

int a[1+n/32];

void set(unsigned int i)

void clr(unsigned int i)

unsigned int test(unsigned int i)

int main()

for (i = 0; i < 10; i++)

} getchar();

return 0;

}

位運算(1) 初識位運算

前段時間數電課學了些進製轉換,還有與或非等邏輯運算,如今再來看看位運算,倒輕鬆了不少。很早就想寫些非總結性部落格了,奈何還是太懶。也也不知怎的突然又來了興致,趕忙寫下這篇部落格。廢話不多說,今天準備總結總結關於位運算的知識。程式中的所有數在計算機記憶體中都是以二進位制的形式儲存的,即0 1兩種狀態,...

位運算子和位運算

一 按位與 運算子 1 運算規則 參加運算的兩個 資料,按二進位進行 與 運算,如果兩個相應的二進位都為1,則該位的結果值為1,否則為0,即 0 0 0,0 1 0,1 0 0,1 1 1.2 用途 1 清零 運算物件 原來的數中為1的位,新數中相應位為0。2 取乙個數中某些指定位。如想要取乙個整數...

位運算子與位運算

位運算是對二進位制位的操作,它應用於整形資料,把整形資料看成固定的二進位制序列,然後對二進位制序列進行位運算 按位與運算 按位與運算子 是雙目運算子。其功能是參與運算的兩數各對應的二進位相與。只有對應的兩個二進位均為1時,結果位才為1 否則為0。參與運算的數以補碼方式出現。例c a b a 1010...