0

特别是我有一个大的无符号数和一个大的有符号负数。

为什么我不能将一个大数除以一个负数 C++

当我尝试将两者相除时,我得到的结果为零仅仅是因为某处将我的有符号数转换为无符号数(这意味着它必须是正数)。>.>;

编辑。

只是要绝对清楚。我知道它已解决为零,对此我很满意。我也很高兴之前的原因是它被解析为零,因为数字从有符号数字转换为无符号数字。

但是,这并不能回答为什么首先将数字从有符号数字转换为无符号数字。这样做似乎没有任何合乎逻辑的理由。

4

1 回答 1

2

算术运算符的操作数需要具有相同的类型。这使得该语言更易于定义和实现,部分原因是要处理的案例更少,部分原因是硬件通常也不支持混合类型的操作。形式上,C++ 是根据虚拟机定义的,但该机器的预期功能受到现实世界硬件的影响。由标准规定但不受硬件支持的操作(例如您假设的有符号-无符号除法)需要由编译器编写者在库代码中实现,这会影响性能。

有符号的操作数需要转换为无符号的,反之亦然。标准委员会选择了前者。

于 2014-02-16T05:33:10.573 回答