200-134=?
相信這個問題難不倒你,讀到這句話的時候,你可能已經口算出了答案。讓咱們慢一點,來看看咱們是如何一步一步作減法的。
你的腦海裏可能浮現出了一個詞:借位。沒錯,減法比加法麻煩的就是,它沒有進位,但有借位這個煩人的東西。對於這道題,將它寫成豎式,從最右邊那一列入手,0是小於4的,因此往左邊借一位,再用10減去4獲得6。由於咱們往左邊的0借了一位,因此實現上這時的0應該變成-1,-1是小於3的,因此咱們又要往左邊借一位。你看,借位是多麼的麻煩!code
那麼如何經過邏輯門來實現這個邏輯呢?嘿!嘿!嘿!看字,別再想了,你簡直是在折磨本身,爲了讓本身好過一點,咱們須要想辦法來回避借位操做:
什麼狀況下,被減數不須要借位?格嘰,格嘰,格嘰格嘰,開動你的腦筋。沒錯,每一位都是9的時候!這裏的操做數是3,因此咱們取3個9減去134。it
從一串9中減去一個數,稱爲對9求補數io
那麼如今,原式變成了這樣class
由於200-102是個整數,再加上999就進位了。因此咱們不妨把減999變成減1000,這樣作減法的時候好算一點二進制
這樣,咱們就回避了借位。在十進制中是取對9的補數,那麼在二進制中就是使用1了,上面的例子可化爲:方法
第一步,咱們用11111111(十進制中爲255)減去減數:計算機
在二進制中,對1求補數能夠不用減法,由於1減去1爲0,1減去0爲1,只須要按位取反便可。因此對1求補數,也能夠稱爲相反數或者反碼
。di
第二步,把減數對1的補數與被減數相加co
第三步,將所得結果加1
display
第四步,將所得結果減去100000000(十進制中的256):
結果001000010
至關於十進制的66
在計算機中,咱們只有0和1,可沒有負號告訴咱們這個數是負數。那麼如何來表示負數呢?最簡單的固然是用一個二進制數表示負號,當這一位爲0時表示正數,當爲1時表示負數。不過,根據咱們上面的方法,咱們用求補數的辦法規定正負數,還能輕鬆的將正負數相加。不過這種方法也不是十全十美的,缺點就是你得提早知道可能遇到的全部數字的位數。
若是你的花唄額度是500,而且你的餘額不超過500,那麼你的額度應該在-500到499之間,那咱們就能夠把:
寫成
這種機制在二進制中稱爲2的補數。(求2的補數就是先求1的補數再加1)通俗點就是將0到1000分紅兩半,前一半爲正,後一半爲負。對應到二進制就是,1開頭的爲負數,0開頭的爲正數。跟一開始的用特定二進制位表示正負數從這裏來看,沒有什麼區別。01嘛,二進制。
如今134-200
就至關於134加上-200:
10111110是1000010(66)對2的補數,又110111110首位是1表明是負的,因此結果是-66