C 位運算總結(一)

2021-08-30 17:48:43 字數 2255 閱讀 9174

主要講解c++的位運算和位運算的作用。

表示按位與:

1 & 1 = 1

1 & 0 = 0

0 & 1 = 0

0 & 0 = 0

用處:

保留某一位,用於判斷對應位資料是否為1。

int a = 0x00101101;

//判斷低三位是否為1

if(a & 0x100 == 0x100)

使用0x0f來與乙個整數進行&運算,來獲取該整數的最低4個bit位。

int a = 0xa7;

int b = a & 0x0f; //b = 0x07

判斷是否被2整除,即判斷是否為偶數。

int a = 7;

if(a & 1 != 1)

乙個數如果是奇數,就變成偶數,如果是偶數則不變,需要配置~符號使用。

int a = 5;

a = a & ~ 0x01;//a = 4

a = 6;

a = a & ~ 0x01;//a = 6

表示按位或:

1 | 1 = 1

1 | 0 = 1

0 | 1 = 1

0 | 0 = 0

用處:

設定指定位的資料,不管指定位是否為1.

int a = 0x0101;

int b = a | 0x10; //b = 0x0111;

按位異或運算,即相應位的值相同的,結果為 0,不相同的結果為 1。

1 ^ 1 = 0

1 ^ 0 = 1

0 ^ 1 = 1

0 ^ 0 = 0

這裡要注意,不論什麼乙個數字異或它自己都等於0。也就是說。假設我們從頭到尾依次異或陣列中的每個數字,那麼終於的結果剛好是那個僅僅出現一次的數字。由於那些出現兩次的數字所有在異或中抵消掉了。

用處:交換數值。

int a = 18;

int b = 57;

a = a ^ b;

b = a ^ b;

a = a ^ b;

//a = 57, b = 18

解決特定例子:

//給定大小是n的陣列,陣列裡的元素互相不反覆,元素的大小範圍是1~(n+1)。

//目標是找出第乙個miss的數。要求時間複雜度o(n)。空間是o(1)。

int result = 0;//結果

//假設是一百,具體自設

int array[100] = ;

//這裡需要賦值

//......

int res = 0;

for(int i = 0; i < 100; i++)

}if(res == 0)

else

還有類似題目:

寫乙個函式,求兩個整數的之和,要求在函式體內不得使用+、-、×、÷。

求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字以及條件判斷語句(a?b:c)。

按位取反運算是單目運算,用來求乙個位串資訊按位的反,即哪些為0的位,結果是1,而哪些為1的位,結果是0。

~1 = 0

~0 = 1

~0x01 = 0xfe

暫時寫到這裡,下次繼續寫。

數值轉換成二進位制後,按位左移(右移),同時補零,移位運算子要注意的是帶不帶符號移位,分為有符號移位操作和無符號移位操作。

4 >> 1 = 2

4 >> 2 = 1

4 >> 3 = 0

4 << 1 = 8

4 << 2 = 16

4 << 3 = 32

0010 >> 1 = 0001

0100 << 1 = 1000

0010 >> 2 = 0000

0100 << 2 = 0000

作用:

乘以2的倍數,除以2的倍數,左移是乘移2的倍數,右移是除以2的倍數,(當然要注意資料是否超過了上限)。

int a = 4;

int b = a * 2; //b = 4

int c = a << 1; //b = 4

C 位運算總結

位運算應用口訣 清零取反要用與,某位置一可用或 若要取反和交換,輕輕鬆鬆用異或 移位運算 要點 1 它們都是雙目運算子,兩個運算分量都是整形,結果也是整形。2 左移 右邊空出的位上補0,左邊的位將從字頭擠掉,其值相當於乘2。3 右移 右邊的位被擠掉。對於左邊移出的空位,如果是正數則空位補0,若為負數...

C 位運算總結

位運算的運算物件只能是整型或者字元型資料。c 的位運算子 c 中的移位運算 移位運算是指將二進位制資訊串作為整體移動。leetcode上位運算的幾道例題 1 位異或運算 異或運算 相同為0,不同為1。將陣列中的所有元素求異或和,對於相同的元素,異或的結果為0。因此,陣列中成對出現的元素異或和為0,所...

位運算總結

位運算是指按二進位制進行的運算。在系統軟體中,常常需要處理二進位制位的問題。c語言提供了6個位操作 運算子。這些運算子只能用於整型運算元,即只能用於帶符號或無符號的char,short,int與long型別。c語言提供的位運算子列表 運算子 含義 描述 按位與 如果兩個相應的二進位制位都為1,則該位...