補碼運算溢位有兩種溢位, 一種是正數和正數相加得到負數, 一種是表示數字的位數不足引發的溢位
一顆四位的運算器, 取值範圍為[0000, 1111]
補碼區間是[-8, 7]
, 定義兩個變數a
和b
, 變數的範圍是這個區間
正數溢位情況
首先輸入乙個數7
給a
再輸入另個數1
給b
讓a
和b
相加
結果很簡單是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了
思路是: 如果給的太多了, 要溢位了, 我們就不要了設
a
為5
,b
為6
, 讓a
加b
顯然會超出我們的區間
負數加負數, 正數加正數會發生溢位, 正數加負數永遠不會溢位除了減法呢?
a
和b
的值, 我們還知道, 正數取值的極限是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盤。登入目標節點。然後在節...