2025年int32位数值范围详解(原码,补码,反码)

int32位数值范围详解(原码,补码,反码)修复的字节问题 代码修复内容 字节划分规定 32 位字节 高 16 位用来存储数据 高 8 位存储 headingcode 低 8 位存储 version 均为正数约定 32 位 int 的范围 涉及的知识 计算机中使用补码的方式存储数据 原因是

大家好,我是讯享网,很高兴认识大家。

修复的字节问题

  1. 代码修复内容
    1. 字节划分规定:32位字节,高16位用来存储数据,高8位存储headingcode,低8位存储version,均为正数约定
    2. 32位int的范围:(涉及的知识:计算机中使用补码的方式存储数据,原因是:0和-0的补码是一致的)
      1. 原码:二进制表示
      2. 反码:正数:原码和反码一致; 负数:保留高位的符号位,按位取反的操作
      3. 补码:正数:原码一致;负数:反码+1
      4. 出现的问题:1000 0000 原则上为-0的原码,可在计算机中拓展出一个数值,存储负数下限
      5. 即:正数的范围:[0,2^31-1], 负数的范围:(从原则上的-2^31-1, 拓展出一位数据,即使用-0的原码储存-231)[-231,0)
      6. 特别注意1000 0000 这个数值,在计算机底层中,并没有对应的原码、补码、反码概念,而是唯一表示了-2^31
  2. 【修复总结】
    1. 有符号整数,进行算术左移的时候,低位补0,最高位的符号位可能会被修改
    2. 【解决方式】:只要在左移之后将高位的1清除就可以了
    3. 【注意事项】:在进行位运算的时候,要注意高位的符号位是否被修改,存取的数据是否正常。
-- 获取活动识别码和版本号 function GetFestivalHeadingCodeAndVersion(nDbid,topicName) if nil == nDbid or nil == topicName then error("nil == nDbid or nil == topicName",nDbid,topicName) return nil,nil end local data = CPP_GetSubjectValue(nDbid,topicName,topic_pb.ETOPICNAMEFESTIVAL_ACTIVITY_HEADING) if INVALID_INT_VALUE == data then data = 0 end local headingCode = c_and(c_rshift(data,24),0xFF) local version = c_and(c_rshift(data,16),0xFF) -- 主要是在这一步,将移位的符号位高位清除,保证存储的数据仍然是正数 return headingCode,version end 

讯享网
小讯
上一篇 2025-04-02 21:58
下一篇 2025-03-08 22:25

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/21632.html