永发信息网

如何抑制一些无符号整数溢出错误

答案:2  悬赏:10  手机版
解决时间 2021-03-05 10:37
  • 提问者网友:趣果有间
  • 2021-03-04 14:07
如何抑制一些无符号整数溢出错误
最佳答案
  • 五星知识达人网友:野慌
  • 2021-03-04 14:50
从题上看这应该是16bit无符号整数,范围是0-65535。那个n表示的是整数的位数,这里n=16.这段话的意思就是如果无符号整数溢出,结果应该是实际的结果对2^n取模。比如65535+1=65536超出了0-65535的范围,所以结果应该是65536%2^16=0
全部回答
  • 1楼网友:摆渡翁
  • 2021-03-04 16:09
C语言中存在两种整数算术运算,有符号型和无符号型。无符号数运算:所有无符号数运算都是以2的n次方为模,(n是结果中的位数)。所以它不存在运算时的没有那种所谓的“溢出”,当它超过范围时,从零开始重新计数!当一个无符号数和有符号数相加的时候,有符号数会自动转化为无符号数参与运算!有符号数运算: 是可能发生“溢出”的,而且“溢出”的结果不固定。
关于无符号数减去无符号数的用法错误:
if ( i - j >=0) 假如i,j为无符号数,这样写可能会引发错误,即当i小于j的时候,这个式子仍然成立,因为无符号数始终是大于等于零的。例: if ( strlen( a ) >= 10) 与 if (strlen ( b ) -10 >= 0) 这两条语句是不相等的 ,因为strlen函数返回的是无符号数类型。
ANSI C规定在无符号整数和有符号整数之间进行强制类型转换时,位模式不应该改变。类型转换并未改变对象的位模式,改变的是位模式的解释方式。
有符号数转换为无符号数时,负数转换为大的正数(可以理解为原值加上2的n次方),而正数保持不变。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯