windows - 在操作系统中除以零
问题描述
当您尝试将数字除以零时,操作系统应该拉起一个中断(据我所知)。
我的问题与此主题有关:当您尝试使用 Windows 的计算器将数字除以零时,是拦截异常的程序,还是打开系统中断的操作系统,该系统会丢弃异常,该异常由程序?
解决方案
TLDR由于 Windows 是一个闭源操作系统,我个人无法验证 Windows 内核的行为,但我有根据的猜测是,在让您的计算进入 CPU/ALU 之前,程序会检查除以零。
一般来说,你是对的,如果除以零一直到 CPU/ALU,那么应该生成异常/中断。如此处所述,在 Linux 中,该异常最终会向SIGFPE
用户级进程发送终止信号。
您可以通过编译此程序在 Linux 中验证这一点:
void main(){
int x = 1/0;
return;
}
运行gcc test.c
已经警告您除以零,但如果您愿意,让您继续:
test.c: In function ‘main’:
test.c:2:14: warning: division by zero [-Wdiv-by-zero]
2 | int x = 1/0;
| ^
一旦你运行它,你会得到一个错误,说明Floating point exception (core dumped)
这是什么SIGFPE
。
现在让我们看看 Windows 计算器的行为。当您除以零时,它会显示错误Cannot divide by zero
。关键是,计算器程序没有崩溃,你可以继续计算。假设 Windows 具有 Linux 等功能,计算器很可能会在 CPU 上运行计算之前进行“除以零”检查,使其能够在操作系统介入之前捕获错误。
推荐阅读
- c++ - 如何从文本文件中读取空白字符?
- javascript - 我无法在 Angular 版本 11 中获取我的图片的网址
- html - div元素中的背景颜色不显示
- gradle - 一旦 gradle 从 Internet 将依赖项下载到它的缓存目录中,我如何使用该缓存来创建我自己的本地文件存储库?
- javascript - 重新加载 Ajax 页面时 Chrome 和 Firefox 之间的差异
- tableau-api - Tableau:创建一个计算列,将另一列的所有值相加
- airflow - 气流自定义执行器
- cookies - 即使在单击清除数据按钮后,网站也知道我在 DuckDuckGo 移动应用程序上的身份
- swiper.js - Swiper JS:导航有奇怪的行为
- c++ - 如何使 C++ 编译时计算程序递归级别更深?