滿了就會溢位,釋放還是壓抑,這是個問題

2021-10-05 14:47:23 字數 1683 閱讀 4180

補碼運算溢位有兩種溢位, 一種是正數和正數相加得到負數, 一種是表示數字的位數不足引發的溢位

一顆四位的運算器, 取值範圍為[0000, 1111]

補碼區間是[-8, 7], 定義兩個變數ab, 變數的範圍是這個區間

正數溢位情況

首先輸入乙個數7a再輸入另個數1bab相加

結果很簡單是8但是4位二進位制補碼能表示的最大正數為7來看看補碼是怎麼操作的:

a =

0111

b =0001

a + b =

1000

// -8

b =0010

// 如果b = 0010

a + b =

1001

// 7 + 2 = -7

負數溢位情況
a =

1111

// -1

b =1000

// -8

a + b =

10111

// 捨去溢位位, 0111是 7

// -1 - 8 = -9 ≠ 7

顯然, 僅僅是4位二進位制數滿足不了我們的運算要求, 如果是5位, 甚至是8位

就能正確運算出結果

以五位為例

// 7 + 1

00111+0

0001=0

1000

// 8

// 最高位為符號位, 次高位就不是了

// -8 - 1

11000+1

1111=1

0111

// -9

因為我們的區間只有[-8, 7], 只要想辦法讓運算結果不超出這個範圍就ok了

思路是: 如果給的太多了, 要溢位了, 我們就不要了

a5,b6, 讓ab顯然會超出我們的區間

負數加負數, 正數加正數會發生溢位, 正數加負數永遠不會溢位

減法呢?

除了ab的值, 我們還知道, 正數取值的極限是7

7減去a我們得到2, 這個2就代表了a能加的最大的數, 超過這個數它就要溢位了

顯然b > 2也就是說a承受不了b,b會讓a溢位

所以, 我們就不進行這次加法運算

結論: 簡單的溢位邏輯判斷(加法)

二進位制運算中只有加法, 如果是在程式中就要考慮減法

linux 根分割槽滿了

1.df h檢視使用情況 root localhost df h 檔案系統 容量 已用 可用 已用 掛載點 devtmpfs 897m 0 897m 0 dev tmpfs 912m 0 912m 0 dev shm tmpfs 912m 9.0m 903m 1 run tmpfs 912m 0 9...

oracle歸檔日誌滿了

oracle歸檔日誌滿了 oracle歸檔日誌清理 檢視歸檔檔案資訊 登入oracle sqlplus 賬號 密碼 as sysdba 檢視當前歸檔日誌目錄 show parameter recovery 解決方法一 修改歸檔日誌檔案大小 登入oracle sqlplus 賬號 密碼 as sysd...

Docker容器磁碟滿了

容器磁碟空間擴容 登入節點vi etc docker daemon.json 檔案,增加一條 dm.basesize 15g 如下截圖所示 然後重啟docker systemctl restart docker注意 節點資料盤 docker專用 在evs介面擴容docker盤。登入目標節點。然後在節...