位運算及A B

2021-10-01 21:51:14 字數 1303 閱讀 5861

位是資料儲存的最小單位,在計算機中的二進位制系統,每個0或者1就是乙個位(bit)

位操作

1.&(按位與) ----> 真真為真

2.|(按位或) ----> 假假為假

3.^(按位異或) —> 不同為真,相同為假

4.~(按位取反) —> 0為1,1為0

5.>>(按位右移) —> 把二進位制位整體右移 —— 右移等於除了2的n次方,n是右移的位數

6.<<(按位左移) —> 把二進位制位整體左移 —— 左移等於乘了2的n次方,n是左移的位數

a+b

分析:

確定需要進製

1+1 = 2

a:0000 0001

b:0000 0001

c:0000 0010

a&b:0000 0001,當a和b某一位相同時(都是1),那麼下次計算需要進製

確定不需要進製

1+2 = 3

a:0000 0001

b:0000 0010

c:0000 0011

a&b:0000 0000 == 0,即當a&b == 0時,不需要進製

不需要進製的時候,如何得到結果?

1+2 = 3

a:0000 0001

b:0000 0010

使用a&b:0000 0000確定不需要進製,

當某一位是1的時候,需要儲存下來,則使用^(按位異或)

a^b:0000 0011 == 3

此時得到想要的結果

需要進製的時候,如何得到結果?

1+3 = 4

a:0000 0001

b:0000 0011

c:0000 0100

使用a&b:0000 0001的知,最後一位需要進製

使用<<(按位左移)得到乙個進製後的c ———— (a&b)<<1 : 0000 0010

使用^(按位異或)得到原值不需要進製的部分d ———— (a^b) : 0000 0010

此時,將c與d重複上述操作

直到,&(按位與)的結果是0 ,說明沒有進製了,也說明計算結束了

**實現

#include using namespace std;

int main()

cout << flag2 << endl;

}return 0;

}

位運算實現A B

a b單獨的通過算術運算實現是很簡單的,具體的 操作如下所示 public class solution 下面主要講的是通過位運算子實現相加操作。思路 不使用算術運算求和那麼只能考慮直接在二進位制位上進行位運算,事實上利用異或運算 和與運算 就能完成加法運算要做的事情,其中異或運算完成相加但是不進製...

位運算求a b

位運算 給出兩個整數 a 和 b,求他們的和。挑戰顯然你可以直接 return a b,但是你是否可以挑戰一下不這樣做?不使用 等算數運算子 分析 主要利用異或運算來完成,異或運算有乙個別名叫做 不進製加法,那麼a b就是a和b相加之後,該進製的地方不進製的結果,然後下面考慮哪些地方要進製,自然是a...

列舉及位運算

目錄 1.基礎列舉演算法 2.整數列舉 3.小數列舉 4.位運算 5.二進位制列舉 列舉是基於已有知識來猜測答案的一種問題求解策略。列舉所有可能是問題解的答案並進行判斷。在演算法競賽中,列舉是一種基本的技巧,廣泛運用於部分分和對拍。實現 int pos 1 for int i 1 i n i if ...