• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

X86等系统编程中,无符号数溢出相关?

沃尔夫斯堡的羊 2019-09-30 浏览量:774
在X86或者arm的系统编程中,系统一直在运行,假设其中有个异常累计变量,数据类型为无符号整型(为了说明简单,不妨是8位),在计数递增,计数范围(0-255),当其溢出时,比如计到266,这个变量值是1,那么如何去区别这个”1“和正常计数没有溢出时的”1“呢?如何去避免这样的溢出呢?
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 如果是编程预防的角度,要区别其实是比较简单的,比如有一个初始化为0的标志性变量,在这个计数变量为255时置1或者加1,这样监测这个变量不为0,且计数为0、1...254就表示发生过溢出啦。

    当然,其实系统环境中也有专门的溢出标志寄存器之类的,这个要查手册去确定。


    对于如何避免这样的溢出,这个要看你程序运行的目的,如果只是简单的计数,有很多可能的方法

    1. 有些语言支持超大数,甚至是不受限制的数,对此是不存在溢出的,比如python

    2. 对于可能发生溢出的语言,可以尽量选取一个支持更大数的格式,首先让溢出发生的时间延迟,其次这种计数器如果不是特别必要,让其忽略溢出影响,即在某个时刻,让计数器主动从0开始计数,变成一个循环计数器就好。当然,这个需要结合计数器的作用来设计。

    • 发布于 2019-09-30
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:1
  • 首先,数据溢出后为0而不是1。 以8bits数为例,最大为0B111111111,加1后产生进位自身变为0B00000000。


    对于不允许溢出的变量,累计时要检查范围。
    比如8bits无符号数累计:
    if(a < UINT8_MAX)
        a++;
    允许溢出但需要检查的。
    a++;
    if(a==0)
    {
        //溢出处理
    }

    • 发布于2019-09-30
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

X86等系统编程中,无符号数溢出相关?