有符號整數在八比特內存結構存儲時的規則為什麼是數據比特取反加一?

時光_只知_堅持 2021-09-18 16:22:35 阅读数:254

比特 比特 取反

想必看這篇文章的你,一定是已經了解有符號整數在內存中的存儲的方式的。並且,你可能不滿足於知道what,而想知道why,要解决這個問題,我們需要分解為兩個小問題來進行解答。


1、為什麼要取反?

可能你思考過,在八比特內存結構中,我們直接用1000 0001來錶示-1就行了,幹嘛還這麼麻煩去用1111 1111來錶示-1。
你應該知道用前者的存儲方式的目的是為了方便你的記憶。而我們存儲負數的目的不僅僅是為了方便記憶存儲,更為重要的是為了使用它來進行負數的計算。所以這是你思維偏離的原因。(注意這不是思維錯誤,只是你的思維站在了方便記憶的這一角度。但是有符號負數的存儲是為了解决方便計算的問題,這是站在方便計算的角度。這也是我們常說的站在不同層次和不同角度思考問題會產生不同的結果)
站在方便計算的角度,負數取反其實主要是為了解决相反數相加等於零的問題。
1+(-1)=0 -》 0000 0001 + 1111 1111 = 1 0000 0000.然後高比特溢出剩下 0000 0000。


2、為什麼要加一?

這個可能提一下就理解了,我們知道0000 0000錶示0(正數補碼為原碼),如果規則只是負數取反,那1111 1111就應該錶示-0了呀(雖然可能高等數學中有正負0的概念,但是那是基於無現的條件下,我們知道計算機只能計算有限值,所以不考慮),那不是浪費麼。那咱們把它都往後挪一比特,1111 1111錶示-1。這也是為什麼byte類型為什麼是-128~127

版权声明:本文为[時光_只知_堅持]所创,转载请带上原文链接,感谢。 https://gsmany.com/2021/09/20210918162234888u.html