0x80000000存儲(chǔ)和表示問(wèn)題

看算法時(shí),發(fā)現(xiàn)以下設(shè)置語(yǔ)句

int i = 0x80000000
// 二進(jìn)制表示為 10...0, ...表示省略中間的0或1

推測(cè)是負(fù)數(shù)最小值,可是觀察其二進(jìn)制表示,第一位是符號(hào)位,1表示負(fù)數(shù),那么上述的值就是 -0,很明顯不是這個(gè)含義。所以到網(wǎng)上查閱了一下,找到了這個(gè)答案。
轉(zhuǎn)載至 關(guān)于0x80000000為什么等于-2147483648和負(fù)數(shù)在內(nèi)存上儲(chǔ)存的問(wèn)題

1.負(fù)數(shù)在內(nèi)存中的存儲(chǔ)形式

  • (1)十進(jìn)制負(fù)數(shù)以補(bǔ)碼存儲(chǔ)于內(nèi)存上
-8的在內(nèi)存上存儲(chǔ)形式: 1...1000
  • (2)十六進(jìn)制負(fù)數(shù)以原碼存儲(chǔ)在內(nèi)存上
int i = 0x80000001
// i=-1在內(nèi)存上表示為 10...01
  • (3)0x80000000的表示值
    0x80000000的值為 -2^31
    1后面的31位表示序號(hào)位,0...0【類似于數(shù)組中的0號(hào)位】,表示負(fù)數(shù)中的最小的一位。由于int的最小值為-2^31,排在負(fù)數(shù)從小到大的第0位,所以int i = 0x80000000 為 -(2^31)+ 0 = -2^31
  • (4)十進(jìn)制的補(bǔ)碼也符合符號(hào)位+序號(hào)位的原則
    以-1為例,其補(bǔ)碼為 1..1
    11...1序號(hào)位為第2^31 -1位
    所以其值為 -2^31 + 2^31 -1 = -1 符合預(yù)期

2.總結(jié)

花了半個(gè)小時(shí)整理別人的東西,也算小有收獲。符號(hào)位+序號(hào)位原則,序號(hào)位從0開始,序號(hào)位的值是多少就在最小值的基礎(chǔ)上加上多少。好像也是符合正數(shù)的情況~~~。

數(shù)值 = 該符號(hào)下最小值 + 序號(hào)位表示數(shù)

以上。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容