資料表示法與數字系統

符號-數值表示法(sign-magnitude)

符號-數值表示法是把負數加進二進位最直觀的方式,也跟我們手寫的方式相同:開頭一個符號,後面接大小。在這裡,最左邊的位元被保留為符號位元(0 表示正,1 表示負),其餘位元裝樸素的數值大小。這就像寫 +5 或 -5:一個記號管正負,其餘管數有多大。

在 8 位元裡,+5 是 0 0000101(符號位元 0、數值 5),而 -5 是 1 0000101(符號位元 1、同樣的數值 5)。它的吸引力在於人類好讀——要取負只需翻轉符號位元。但有兩個缺陷使它不適合一般用途。第一,零有兩個不同的圖樣:0 0000000 是正零、1 0000000 是負零,這浪費了一個圖樣,也逼硬體把位元不同的兩者當成相等。第二,更糟的是,普通的二進位加法跨越符號時不成立:把 +5 和 -5 的位元相加並不會得到零,所以運算單元需要特例邏輯去檢查符號、再決定該加還是該減。

正因為這兩個問題——多餘的零,以及需要彆扭特例處理的算術——符號-數值表示法在整數上輸給了二補數,幾乎沒有現代機器拿它來表示整數。但仍值得認識,原因有二:它清楚點出二補數被發明來解決什麼問題;而且這個概念在浮點數裡存活了下來,那裡的符號確實是以開頭一個獨立位元的方式儲存。

在 8 位元符號-數值法裡,+5 是 0 0000101、-5 是 1 0000101——數值相同、符號位元翻轉。但 0 0000000(+0)與 1 0000000(-0)是兩個零,而把 +5 與 -5 的位元相加得到 1 0001010(-10),不是零。

容易讀,但它有兩個零,而且普通加法跨越符號位元時失效。

符號-數值法直觀,卻因雙重零與加法所需的特例邏輯,在整數上輸給二補數。它「開頭符號位元」的想法則活在浮點格式裡。

又称
signed magnitude符號數值法