#include <stdio.h>
int test1(int x, int n){
int times=31/n;
return ((1-(1<<(n*times)))/(1-(1<<n)));
}
我正在进行计算,其中 1<=n<=32
它仅在 1<=n<=31 时有效,如何将其更改为 n=32?当我在 xcode 中测试其 n=32 情况时,它会触发调试器并显示线程 1 exc_arithmetic(code=exc_i386_div...
预先感谢您。
最佳答案
当你这样做时,很有可能 1 << 32
,它被视为 1 << 0
(并且,由于您正在调用未定义的行为,所以没关系),然后您会得到“浮点异常”,因为您正在执行整数“除以零”。如今,这是导致异常的最常见原因。如果您正在进行浮点算术,则除以零时会(默默地)返回无穷大。
关于c - C代码中的浮点异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39925709/