如何检测无符号整数乘法溢出?
我在C ++编写一个程序来找到所有的解决方案一b = c ^,其中一个,b和c ^一起使用所有的数字0-9只出现一次。该方案在循环值一和b,这一个数字计数例行每次跑了一个,b和一个b以检查是否数字的条件感到满意。
然而,当可以产生伪解一个b溢出整数限制。我最终使用以下代码检查:
unsigned long b, c, c_test;...c_test=c*b; // Possible overflowif (c_test/b != c) {/* There has been an overflow*/}else c=c_test; // No overflow
有没有更好的方法来测试溢出?我知道有些芯片有一个内部标志,当溢出发生时会设置,但我从未见过通过C或C ++访问它。
请注意,在C和C ++中,签名 int
溢出是未定义的行为,因此您必须在不实际导致它的情况下检测它。有关添加前的signed int overflow,请参阅在C / C ++中检测带符号的溢出。
慕村9548890
慕容森
SMILET