看算法時坡倔,發(fā)現(xiàn)以下設置語句
int i = 0x80000000
// 二進制表示為 10...0, ...表示省略中間的0或1
推測是負數(shù)最小值,可是觀察其二進制表示脖含,第一位是符號位罪塔,1表示負數(shù),那么上述的值就是 -0养葵,很明顯不是這個含義征堪。所以到網(wǎng)上查閱了一下,找到了這個答案关拒。
轉(zhuǎn)載至 關于0x80000000為什么等于-2147483648和負數(shù)在內(nèi)存上儲存的問題
1.負數(shù)在內(nèi)存中的存儲形式
- (1)十進制負數(shù)以補碼存儲于內(nèi)存上
-8的在內(nèi)存上存儲形式: 1...1000
- (2)十六進制負數(shù)以原碼存儲在內(nèi)存上
int i = 0x80000001
// i=-1在內(nèi)存上表示為 10...01
- (3)0x80000000的表示值
0x80000000的值為 -2^31
1后面的31位表示序號位佃蚜,0...0【類似于數(shù)組中的0號位】,表示負數(shù)中的最小的一位着绊。由于int的最小值為-2^31,排在負數(shù)從小到大的第0位谐算,所以int i = 0x80000000 為 -(2^31)+ 0 = -2^31 - (4)十進制的補碼也符合符號位+序號位的原則
以-1為例,其補碼為 1..1
11...1序號位為第2^31 -1位
所以其值為 -2^31 + 2^31 -1 = -1 符合預期
2.總結(jié)
花了半個小時整理別人的東西畔柔,也算小有收獲氯夷。符號位+序號位原則,序號位從0開始靶擦,序號位的值是多少就在最小值的基礎上加上多少腮考。好像也是符合正數(shù)的情況~~~。
數(shù)值 = 該符號下最小值 + 序號位表示數(shù)
以上玄捕。