1. 程式人生 > >通過a+b的二進位制運算,理解異或和與操作

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

網上見到一道題目,要求用與或非等邏輯運算實現計算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 。。。不糾結表述細節了)

相關推薦

通過a+b二進位制運算理解操作

網上見到一道題目,要求用與或非等邏輯運算實現計算a+b的題目。這裡我想借著這道題,記錄一下自己的思路,留作以後溫故。 假設 整數 a 、b都是正數 a = 6,二進位制表示為 0110 b = 4 ,二進位制表示為 0100 我們需要知道,上下對齊後,哪幾位需要進位,哪幾位

CSU 1131: Nim-B* Sum (求B進位制的

DescriptionThe game of NIM is played with any number of piles of objects with any number of objects in each pile.  At each turn, a player takes one or more

SPOJ4491. Primes in GCD Table(gcd(a,b)=d素數(1&lt;=a&lt;=n,1&lt;=b&lt;=m))加強版

function ted solid result writing set silver %d ron SPOJ4491. Primes in GCD Table Problem code: PGCD

線上選課案例—通過js實現全選全不選多選效果。順便談談理解的半吊子flag這個變數

要點: 1.首先分為兩個業務邏輯的模組,首先 全選/取消全選 的按鈕會的選中的狀態或者沒有選中,他的返回值是Boolean型別,也就是說通過通過這個通過全選按鈕將其Boolean型別的值,通過迴圈賦值給全選框下面所有的單選按鈕 2.再單選按鈕執行之前,將所有的單選按鈕狀態做一次判斷,判斷是否

java實現:2018年9月9日晚上的京東筆試題:現給出n個物品的a,b,c引數請你求出不合格品的數量。

題目: 現有n個物品,每個物品有三個引數,ai,bi,ci,定義i物品不合格的依據是:若存在物品j,且aj>ai,bj>bi,cj>ci,則稱i物品為不合格品。 現給出n個物品的a,b,c引數,請你求出不合格品的數量。 輸入: 第一行包含一個整數n(1<=n&

線性表的合併已知兩個集合AB現要求一個新的集合A=AB。例如A=(7,5,3,11)B=(2,6,3)合併後A=(7,5,3,11,2,6)。

#include<iostream> using namespace std; #define MAXSIZE 100 #define OK 1 #define ERROR -1 #define OVERFLOW -2 #define  MAXSIZE 100 &n

HDU 1228 A + B(來吧互相傷害)

有點辣眼睛,還有兩個部分也可以函式化,那樣的話,程式碼還是可以少很多的。 大致思路就是+號前和後兩部分放到兩個二維陣列,然後轉化為數值相加即可 #include<stdio.h> #include<string.h> char value[10][6

[Java]實現簡單的a+b(位運算篇)

實現簡單的a+b 說明 a和b都是 32位 整數麼? 是的 我可以使用位運算子麼? 當然可以 樣例 如果 a=1 並且 b=2,返回3。 挑戰 顯然你可以直接 return a + b,但是你是否可以挑戰一下不這樣做?(不使用 "+" 等算數運算子) 當然

&|^運算以及運用場景

一.按位與運算子 參加運算的兩個資料,按二進位制位進行位與運算.          例如:3&5          先將兩個資料轉化為二進位制數,然後按位進行與運算,同為1結果為1,其它情況結

牛客挑戰賽18 C (加深下對哈曼頓距離的理解)

coder scanf fin board 貢獻 brush true mat TE 鏈接:https://www.nowcoder.com/acm/contest/129/C來源:牛客網 異或和 時間限制:C/C++ 1秒,其他語言2秒 空間限制:C/C+

Terns Pharmaceuticals上海拓臻生物科技有限公司完成8000萬美元B輪融資用於推進NASH癌症藥物的研發

籌集資金將用於支援NASH候選藥物的臨床及臨床前研發 由維梧資本(Vivo Capital)和奧博資本(OrbiMed)領投,德誠資本(Decheng Capital)跟投 A輪投資人禮來亞洲基金(Lilly Asia Ventures)亦共同參與B輪投資 加州聖馬特奧和中國上海--(美國商業資

Luogu3760 TJOI2017 運算、樹狀陣列

傳送門 題意:給出一個長度為$N$的非負整數序列,求其中所有連續區間的區間和的異或值。$N \leq 10^5$,所有元素之和$\leq 10^6$   設序列的字首和為$s_i$,特殊地,$s_0=0$ 因為最後答案是一個異或值,所以我們考慮按位計算答案,也就是計算所有區間和中某一位上

E. Mahmoud and a xor trip 按位處理 dp

Description Mahmoud and Ehab live in a country with n cities numbered from 1 to n and connected by n - 1 und

窮舉所有資料

Description averyboy是一個非常男孩,這一天他來到薈園吃午飯,買飯之前,食堂阿姨給了他一個問題。如果他能解決這個問題,食堂阿姨將會給他一個免費午餐。由於averyboy沒吃飯,解決不了這個問題,但是他又想得到免費的午餐。現在他正向你求助,你能幫助他嗎?食堂阿姨所給的問題如下:薈

【ICPC2017 Urumqi 新疆區域賽 烏魯木齊】UPC-5220 A Possible Tree(樹上路徑判斷)

題目描述 Alice knows that Bob has a secret tree (in terms of graph theory) with n nodes with n − 1 weighted edges with integer values

布林運算 : ^(運算XOR)、&(運算AND)、|(運算OR)、 、~(非門NOT)

在Leetcode刷Single Number這道題的時候,自己的想法就是遍歷,想了下別的簡便想法,楞是沒想出,看了下討論區的大手的,發現了使用XOR,於是想著補補門陣列了。 Given a non-empty array of integers, every ele

lintcode 二進位制求和 給定兩個二進位制字串返回他們的(用二進位制表示)。

Lintcode容易題 二進位制求和 檢視執行結果  15:00  Start 給定兩個二進位制字串,返回他們的和(用二進位制表示)。 您在真實的面試中是否遇到過這個題?  Yes 樣例 a = 11 b = 1 返回 100 標籤 字串

序列子區間問題(西安電子科技大學第16屆程式設計競賽 E Xieldy And His PasswordU14739 X ask Y III 子區間、牛客練習賽16 E求值)

序列子區間問題一般都是問你,求序列子區間的和的和...異或和的和..和的異或和...和是3的倍數的個數... 這類問題一般都是用(字首和+)記錄狀態的陣列來實現,將O(n*n)的複雜度降為O(k*n)(k為常數) 這類問題可以從如何優化遍歷以i為結尾的連續子序列的複雜

深入理解操作

接觸C語言有好多年了,工作中一直沒用過位操作,所以也一直沒有注意異或操作。突然發現自己對異或操作理解的並不是那麼深刻。好吧,重新學習一下。 位操作預算有以下幾種 位操作運算 功能 符號 用法 位求反

二進位制trie樹解最大值問題

trie樹一般可以用於查詢與指定值最近的,而二進位制trie樹因為每個節點最多有兩個子節點,所以也可以查詢與指定值最遠的值,即異或最大值。 (1)問題:給定一個數組,在陣列中找到兩個數,使得這兩個數的異或值最大 (2)要點:對於陣列中的每個元素,二進位制trie樹查詢異