美文网首页
0x80000000存储和表示问题

0x80000000存储和表示问题

作者: xkang | 来源:发表于2018-01-09 16:01 被阅读0次

    看算法时,发现以下设置语句

    int i = 0x80000000
    // 二进制表示为 10...0, ...表示省略中间的0或1
    

    推测是负数最小值,可是观察其二进制表示,第一位是符号位,1表示负数,那么上述的值就是 -0,很明显不是这个含义。所以到网上查阅了一下,找到了这个答案。
    转载至 关于0x80000000为什么等于-2147483648和负数在内存上储存的问题

    1.负数在内存中的存储形式

    • (1)十进制负数以补码存储于内存上
    -8的在内存上存储形式: 1...1000
    
    • (2)十六进制负数以原码存储在内存上
    int i = 0x80000001
    // i=-1在内存上表示为 10...01
    
    • (3)0x80000000的表示值
      0x80000000的值为 -2^31
      1后面的31位表示序号位,0...0【类似于数组中的0号位】,表示负数中的最小的一位。由于int的最小值为-2^31,排在负数从小到大的第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.总结

    花了半个小时整理别人的东西,也算小有收获。符号位+序号位原则,序号位从0开始,序号位的值是多少就在最小值的基础上加上多少。好像也是符合正数的情况~~~。

    数值 = 该符号下最小值 + 序号位表示数
    

    以上。

    相关文章

      网友评论

          本文标题:0x80000000存储和表示问题

          本文链接:https://www.haomeiwen.com/subject/fltgnxtx.html