一、整数除以 0(编译时检测)
1、演示
#include <iostream>
using namespace std;
int main() {
int result = 10 / 0;
cout << result << endl;
return 0;
}
- 程序无法运行,输出结果
error C2124: 被零除或对零求模
2、演示解读
- 编译器在编译时,就能发现
10 / 0
,直接报错,阻止程序生成可执行文件
二、整数除以 0(运行时检测)
1、演示
#include <iostream>
using namespace std;
int main() {
int a = 10;
int b = 0;
int result = a / b;
cout << result << endl;
return 0;
}
- 程序运行崩溃,输出结果
(进程 19836)已退出,代码为 -1073741676 (0xc0000094)。
2、演示解读
-
由于 b 是变量,编译器无法在编译时检测除零,程序可以编译通过
-
运行时触发异常,导致程序崩溃
三、浮点数除以 0(编译时检测)
1、演示
#include <iostream>
using namespace std;
int main() {
double result = 10.0 / 0.0;
cout << result << endl;
return 0;
}
- 程序无法运行,输出结果
error C2124: 被零除或对零求模
2、演示解读
- 编译器在编译时,就能发现
10.0 / 0.0
,直接报错,阻止程序生成可执行文件
四、浮点数除以 0(运行时检测)
1、演示
#include <iostream>
using namespace std;
int main() {
double a = 10.0;
double b = 0.0;
double result = a / b;
cout << result << endl;
return 0;
}
- 程序运行结束,输出结果
inf
(进程 1784)已退出,代码为 0 (0x0)。
2、演示解读
- 浮点数除 0 程序不会崩溃,而是返回特殊值
-
+inf
(正无穷):由10.0 / 0.0
产生 -
-inf
(负无穷):由-10.0 / 0.0
产生 -
nan
(非数字):由0.0 / 0.0
产生
3、补充演示
负数 / 0.0
#include <iostream>
using namespace std;
int main() {
double a = -10.0;
double b = 0.0;
double result = a / b;
cout << result << endl;
return 0;
}
- 程序运行结束,输出结果
-inf
(进程 11416)已退出,代码为 0 (0x0)。
0.0 / 0.0
#include <iostream>
using namespace std;
int main() {
double a = 0.0;
double b = 0.0;
double result = a / b;
cout << result << endl;
return 0;
}
- 程序运行结束,输出结果
nan(ind)
(进程 13408)已退出,代码为 0 (0x0)。