uint8变量运算中如何触发下溢,使a=b*39216/100000结果>100?
问题解答
首先明确:不存在这样的b值,原因如下:
uint8类型的范围限制:uint8变量的取值范围是
0~255,先看正常运算下的最大值:
当b=255时,计算过程为:255 * 39216 = 9999080 9999080 / 100000 = 99.9908由于uint8是整数类型,整数除法会截断小数部分,最终
a=99,无法达到100。关于你提到的“下溢”尝试:
uint8是无符号整数,不存在“下溢”(下溢是有符号类型的概念,指数值低于最小值),无符号整数只有“溢出”(数值超过最大值后取模256)。但即使尝试利用溢出:- 若强制将
b*39216按uint8类型存储,由于39216 = 256 * 153,b*39216对256取模的结果始终为0,再除以100000后a=0,显然无法超过100。 - 若按常规语言的整数提升规则(如C语言中uint8会先转为int计算),中间结果不会溢出,最终得到的
a仍最大为99。
- 若强制将
综上,无论是否利用溢出,都不存在能让a>100的b值。
内容的提问来源于stack exchange,提问作者Shane Morris
相关产品推荐
相关产品推荐

