計算機進行加減法

2022-03-30 19:50:19 字數 1618 閱讀 4584

計算機的加減法操作都是以八個位元也就是乙個位元組為單元的 超過乙個位元組的數值的操作 要把資料以乙個位元組為單位劃分n個資料來操作

1 加法 

二進位制只有 0 和 1  兩個數相加的情況ab

結果進製10

1011

0100

0001

10上圖為乙個位元組加法器的實現 低位的的進製輸出作為下一位的進製輸出 總的進製輸出 放到一位鎖存器裡面 以便後續以每個位元組為單元進行進製相加操作

下圖所示為4位16進製制(16位二進位制) 進行加法運算示意圖  每個資料分類 低8位和高8位 第乙個資料的低8位 先與第二個資料的低8位相加 結果和進製儲存起來

然後再把兩者的高8位和低8位的進製相加起來 結果存出來 拼起來就是兩個數值的和(如果整體有進製的話 會被拋棄)

2 減法 進行減法時候必須注意的就是:低位不夠減要向高位借位,這個實現起來就比較複雜 但是有個辦法可以不借位實現減法

999-176  叫做176 的十進位制補碼  同理二進位制的減法也可以進行此操作 也就是而且只8位最大數字11111111 補碼的求法相當於用1減去位上的數值 也就是如果是1 此為取補後1-1=0  如果是0取補后位1-0=1 也就是二進位制的補碼 就是此數值每位取反 所以兩個數如果進行減法操作 輸入端只要取法就行

多個位元組的減法同加法相似 也要考慮進製因為加法是減數的補碼相加 所以低位元組結果是由有進製可能的

3 總結  

1 如果兩個不同長度數值相加系統會先較短的的前補0到與長的等同 一邊劃分量相同的 8位數相加

2 數值相加是可能進製的 但是按照上面的理論 比如你加兩個16位數 每個16位數 分成兩個8位數(低位 和 高位) 低位進製輸出可以放到高位的進製輸入裡 但是最高位的進製輸出呢放到**?

顯然最高位的進製無法儲存 所以加到 11111111 11111111  再加1 就會變為 00000000 00000000 這就是程式的溢位 

the hidden language of computer hardware and software 讀後筆記 @wang

對字母進行加減法

private string getjob level dis string job level 如果結束級別為c2,不是唯一的c,則獲取具體級別,寫入時要寫入給定級別前面的崗位級別 c1,c2 沒有c3 if job levels 1 length 1 獲取大的級別char first job l...

時間加減法

include stdafx.h include windows.h typedef struct tagmydate mydate 用於表示兩個時間之間的差值,負值表示慢,正值表示快 typedef struct tagtimedistance timedistance int month day...

時間加減法

1.相關資料結構 首先看time.h檔案中隊time t的定義 可以看出time t實際上是乙個整數,它記錄了儲存的是從1970年1月1日0時0分0 秒到現在經過的秒數。這裡有一點要注意,對time t資料型別的值來說,它所表示的時間不能晚於2038年1月18日19時14分07秒,否則會發生溢位。為...