通過a b的二進位制運算,理解異或和與操作

2021-08-14 08:30:54 字數 1082 閱讀 7311

網上見到一道題目,要求用與或非等邏輯運算實現計算a+b的題目。這裡我想藉著這道題,記錄一下自己的思路,留作以後溫故。

假設 整數 a 、b都是正數

a = 6,二進位制表示為 0110

b = 4 ,二進位制表示為 0100

我們需要知道,上下對齊後,哪幾位需要進製,哪幾位不需要進製。而對於其中的某一位,只會出現這兩種情況的其中一種。另外,進製後是否還需要進製,這可以放到下一輪計算再考慮。

這裡我們將過程分為兩個階段。第乙個階段,判斷是否需要進製,第二階段,進製後是否還需要進製。現在先拆分第一階段。

*************************= 第一階段 *************************====

第一輪計算:按位運算(不考慮進製)

我們需要知道哪幾位不存在進製。異或操作對 0^1和1^0兩種情況,運算結果為1 ,0^0和1^1的運算結果為0,正好滿足我們的需求

a ^ b = 0110 ^ 0100 = 0010 

即從右向左,起始從1開始,只有第二位不存在進製。我們將結果記為 a1 = a ^ b

第一輪計算:進製運算

除了知道哪幾位不存在進製,我們還需要知道哪幾位需要進製。按位上下對齊後,只有上下都是1的時候才會有進製,而與操作正好符合要求

a & b = 0110 & 0100 = 0100 

即從右向左,只有第三位存在進製,我們將其結果整體公升一位(進製)即滿足了要求,即(a & b) << 1

我們將結果記為 b1 = (a & b) << 1

*************************= 第二階段 *************************=

我們將a + b 運算按照 需要進製和不需要進製兩種運算進行了拆分,即將a + b 轉化為了 a1 + b1

下面我們需要確定 進製之後的結果 b1 與未進製的結果 a1 是否有衝突,其運算需求跟最初 a + b 的需求是一樣的,因而我們可以採用第一階段的方式完成我們的任務。

整個運算的結束標誌是 沒有需要進製的需求了,即b1 = 0,而最終的結果就是所有位置都穩定下來的 a1(這裡的a1 或 b1 可能要經過很多次迴圈,可能是 a2 a3 。。。不糾結表述細節了)

二進位制位運算(與 或 異或 取反)

1.與運算 and 0 and 0 0 全1才1 1 and 0 0 0 and 1 0 1 and 1 1 用途 用來位置0,若想把ffh 11111111b,255d 第 三 五 從右往左 位置0,只需 and 11101011b 235d,e8h 2.或運算 or 0 or 0 0 全0才0 ...

AB二進位制

description 若將乙個正整數化為二進位制數,在此二進位制數中,我們將數字1的個數多於數字0的個數的這類二進位制數稱為a類數,否則就稱其為b類數。例如 13 10 1101 2 其中1的個數為3,0的個數為1,則稱此數為a類數 10 10 1010 2 其中1的個數為2,0的個數也為2,稱此...

異或與二進位制

baobao has a sequence a 1 a 2 a n he would like to find a subset sof such that i j s a i a j a i a j and s is maximum,where means bitwise exclusive or...