天天看點

按位與、或、異或運算

一、按位與(&)

1、概念:參加運算的兩個對象,按二進制位進行“與”運算,負數按補碼形式參加按位與運算。

2、運算規則:0&0=0; 0&1=0;1&0=0;1&1=1;即:兩位同時為“1”,結果才為“1”,否則為0【有0則0】

 例如:3&5=1,即0000 0011 & 0000 0101 = 0000 0001

3、“與運算”特殊用途:

(1)清零。如果想将一個單元清零,即使其全部二進制位為0,隻要與一個各位都為零的數值相與,結果為零。 

(2)取一個數中指定位。找一個數,對應X要取的位,該數的對應位為1,其餘位為零,此數與X進行“與運算”可以得到X中的指定位。

例:設X=10101110,取X的低4位,用 X & 0000 1111 = 0000 1110 即可得到;還可用來取X的2、4、6位。

二、按位或(|)

1、概念:參加運算的兩個對象按二進制位進行“或”運算,負數按補碼形式參加按位與運算。

2、運算規則:0|0=0;0|1=1;1|0=1;1|1=1;即 :參加運算的兩個對象隻要有一個為1,其值為1【有1則1】

例如:3|5=7,即 0000 0011 | 0000 0101 = 0000 0111 

3、“或運算”特殊作用:

(1)常用來對一個資料的某些位置1。找到一個數,對應X要置1的位,該數的對應位為1,其餘位為零。此數與X相或可使X中的某些位置1。
例:将X=10100000的低4位置1 ,用 X | 0000 1111 = 1010 1111即可得到。

三、異或運算(^)

1、概念:參加運算的兩個資料,按二進制位進行“異或”運算

2、運算規則:0^0=0;0^1=1;1^0=1;1^1=0;即:參加運算的兩個對象,如果兩個相應位為“異”(值不同),則該位結果為1,否則為0【同0異1】

例如:3^5=6,即0000 0011^0000 0101 = 0000 0110 

3、“異或運算”特殊作用:

(1)使特定位翻轉 找一個數,對應X要翻轉的各位,該數的對應位為1,其餘位為零,此數與X對應位異或即可。

(2)與0相異或,保留原值 ,X ^ 0000 0000 = 1010 1110。

例:X=10101110,使X低4位翻轉,用X ^ 0000 1111 = 1010 0001即可得到。
(3)基于異或運算,不引用新變量交換兩個變量的值

a = a ^ b;   b = a ^ b;   a = a ^ b;

【同樣基于加減法的話有:a = a + b;   b = a - b; a = a -b;】 

四、不同長度的資料進行位運算

如果兩個不同長度的資料進行位運算時,系統會将二者按右端對齊,然後進行位運算。

以“與”運算為例說明如下:我們知道在C語言中long型占4個位元組,int型占2個位元組,如果一個long型資料與一個int型資料進行“與”運算,右端對齊後,左邊不足的位依下面三種情況補足,

(1)如果整型資料為正數,左邊補16個0。

(2)如果整型資料為負數,左邊補16個1。

(3)如果整形資料為無符号數,左邊也補16個0。

如:long a=123;int b=1;計算a & b。 

如:long a=123;int b=-1;計算a & b。 

如:long a=123;unsigned int b=1;計算a & b。

一、按位與(&)

1、概念:參加運算的兩個對象,按二進制位進行“與”運算,負數按補碼形式參加按位與運算。

2、運算規則:0&0=0; 0&1=0;1&0=0;1&1=1;即:兩位同時為“1”,結果才為“1”,否則為0【有0則0】

 例如:3&5=1,即0000 0011 & 0000 0101 = 0000 0001

3、“與運算”特殊用途:

(1)清零。如果想将一個單元清零,即使其全部二進制位為0,隻要與一個各位都為零的數值相與,結果為零。 

(2)取一個數中指定位。找一個數,對應X要取的位,該數的對應位為1,其餘位為零,此數與X進行“與運算”可以得到X中的指定位。

例:設X=10101110,取X的低4位,用 X & 0000 1111 = 0000 1110 即可得到;還可用來取X的2、4、6位。

二、按位或(|)

1、概念:參加運算的兩個對象按二進制位進行“或”運算,負數按補碼形式參加按位與運算。

2、運算規則:0|0=0;0|1=1;1|0=1;1|1=1;即 :參加運算的兩個對象隻要有一個為1,其值為1【有1則1】

例如:3|5=7,即 0000 0011 | 0000 0101 = 0000 0111 

3、“或運算”特殊作用:

(1)常用來對一個資料的某些位置1。找到一個數,對應X要置1的位,該數的對應位為1,其餘位為零。此數與X相或可使X中的某些位置1。
例:将X=10100000的低4位置1 ,用 X | 0000 1111 = 1010 1111即可得到。

三、異或運算(^)

1、概念:參加運算的兩個資料,按二進制位進行“異或”運算

2、運算規則:0^0=0;0^1=1;1^0=1;1^1=0;即:參加運算的兩個對象,如果兩個相應位為“異”(值不同),則該位結果為1,否則為0【同0異1】

例如:3^5=6,即0000 0011^0000 0101 = 0000 0110 

3、“異或運算”特殊作用:

(1)使特定位翻轉 找一個數,對應X要翻轉的各位,該數的對應位為1,其餘位為零,此數與X對應位異或即可。

(2)與0相異或,保留原值 ,X ^ 0000 0000 = 1010 1110。

例:X=10101110,使X低4位翻轉,用X ^ 0000 1111 = 1010 0001即可得到。
(3)基于異或運算,不引用新變量交換兩個變量的值

a = a ^ b;   b = a ^ b;   a = a ^ b;

【同樣基于加減法的話有:a = a + b;   b = a - b; a = a -b;】 

四、不同長度的資料進行位運算

如果兩個不同長度的資料進行位運算時,系統會将二者按右端對齊,然後進行位運算。

以“與”運算為例說明如下:我們知道在C語言中long型占4個位元組,int型占2個位元組,如果一個long型資料與一個int型資料進行“與”運算,右端對齊後,左邊不足的位依下面三種情況補足,

(1)如果整型資料為正數,左邊補16個0。

(2)如果整型資料為負數,左邊補16個1。

(3)如果整形資料為無符号數,左邊也補16個0。

如:long a=123;int b=1;計算a & b。 

如:long a=123;int b=-1;計算a & b。 

如:long a=123;unsigned int b=1;計算a & b。