位運算( 按位與 按位或 異或)

2021-09-23 20:31:31 字數 1376 閱讀 7298

參加運算的兩個數,按二進位制位進行「&」運算。

運算規則:只有兩個數的二進位制同時為1,結果才為1,否則為0。(負數按補碼形式參加按位與運算)

即 0 & 0= 0 ,0 & 1= 0,1 & 0= 0, 1 & 1= 1。

比如10&11:

即 0000 1010 & 0000 1011 = 0000 1010 所以 10&11 等於10;

參加運算的兩個數,按二進位制位進行「或」運算。

運算規則:參加運算的兩個數只要兩個數中的乙個為1,結果就為1。

即 0 | 0= 0 , 1 | 0= 1 , 0 | 1= 1 , 1 | 1= 1 。

比如10|11:

即 0000 1010& 0000 1011 = 0000 1011 所以10|11 等於11;

參加運算的兩個數,按二進位制位進行「異或」運算。

運算規則:參加運算的兩個數,如果兩個相同位相異為1,相同為0。

即 0 ^ 0=0 , 0 ^ 1= 1 , 1 ^ 0= 1 , 1 ^ 1= 0 。

比如3^5 :

即 0000 0011 ^0000 0101 = 0000 0110

所以 3 ^5 等於 6;

1.異或運算子通常還可以用來實現兩個數的交換:(不用建立臨時變數)

比如 int a = 3,int b = 5;交換a和b。

int a = 3;

int b = 5;

a = a ^ b;//①

b = a ^ b;//②

a = a ^ b;//③

0000 0011 ^ 0000 0101 = 0000 0110 所以a = 0000 0110

②0000 0110 ^ 0000 0101 = 0000 0011 所以 b = 0000 0011

③0000 0110 ^ 0000 0011 = 0000 0101 所以a = 0000 0101

所以結果為:

a = 5, b = 3;

面試題:只出現一次的數字

問題描述:給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。

思路:

0 ^ n = n;

n ^ n = 0;

看**:

class solution {

public:

int singlenumber(vector& nums) {

int value = 0;

for(size_t i = 0;i如果對各位看官有幫助,麻煩動一動手指d(゚∀゚d)點讚!

位與 按位或 按位異或 運算

1.按位與運算 按位與運算子 是雙目運算子。其功能是參與運算的兩數各對應的二進位相與。只有對應的兩個二進位均為1時,結果位才為1 否則為0。參與運算的數以補碼方式出現。例如 9 5可寫算式如下 00001001 9的二進位制補碼 00000101 5的二進位制補碼 00000001 1的二進位制補碼...

位運算(按位與 按位或 異或)

按位與運算子 參加運算的兩個數,按二進位制位進行 與 運算。運算規則 只有兩個數的二進位制同時為1,結果才為1,否則為0。負數按補碼形式參加按位與運算 即 0 0 0 0 1 0,1 0 0,1 1 1。例 3 5 即 00000011 00000101 00000001 所以 3 5的值為1。按位...

按位與,按位或,異或等運算

參加運算的兩個資料,按二進位制位進行 與 運算。運算規則 0 0 0 0 1 0 1 0 0 1 1 1 即 兩位同時為 1 結果才為 1 否則為0 例如 3 5 即 0000 0011 0000 0101 0000 0001 因此,3 5的值得1。另,負數按補碼形式參加按位與運算。與運算 的特殊用...