Closed. This question needs details or clarity。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
                        
                        3年前关闭。
                                                                                            
                
        
我在这里有示例代码:

int main(int argc, char **argv) {

if (argc != 3 || !atoi(argv[2]))
return 1;
signal(SIGFPE, catcher);
return abs(atoi(argv[1])) / atoi(argv[2]);
}


捕手的功能是:

void catcher(int a) {
....
}


在编译此代码后,我在博客here上阅读了一篇文章,为什么程序使用标志-2147483648 -1运行?

如果我运行的程序没有此标志-2147483648 -1,则输出为source code is available in level02.c

如果我使用标志-2147483648 -1运行该程序,则输出为WIN!

有人可以解释吗?

编辑

在看到CoolGuy的评论后,我了解了作者如何获取值编号-2147483648 :)

最佳答案

您是在问作者如何得出这些数字吗?

-2147483648是32位上可表示的最小有符号整数:它写为11111111111111111111111111111111(第一个数字,也就是最高有效数字,是符号; 1表示负数)。
因此,将其除以-1(即更改其符号),结果是2147483648,它不能写在32位上,2147483647是32位上可表示的最大有符号整数。因此,又称“算术例外”。 SIGFPE。

10-08 09:19