首页 > 解决方案 > 在操作系统中除以零

问题描述

当您尝试将数字除以零时,操作系统应该拉起一个中断(据我所知)。

我的问题与此主题有关:当您尝试使用 Windows 的计算器将数字除以零时,是拦截异常的程序,还是打开系统中断的操作系统,该系统会丢弃异常,该异常由程序?

标签: windowsexceptionoperating-systeminterruptcalculation

解决方案


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 上运行计算之前进行“除以零”检查,使其能够在操作系统介入之前捕获错误。


推荐阅读