位是資料儲存的最小單位,在計算機中的二進位制系統,每個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 ...