2014-02-16 71 views
0

特别是我有一个很大的无符号数和一个大的签名负数。为什么将带符号的负数转换为无符号数?

Why can't I divide a large number by a negative number C++

当我试图分裂了两下,我得到的结果是零,只是因为一些地方是我的符号数转换为无符号(这意味着它必须为正数)。 >>。

编辑。

只是要绝对清楚。我知道它解决了零,我对此感到满意。我也很满意以前的理由,它被解决为零,因为一个数字从一个有符号数转换为一个无符号数。

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

+0

为什么要转发? – user1520427

+0

这不是同一个问题吗?你的其他问题没有得到足够好的答案吗? –

+1

这不是同一个问题。我之前的问题是关于为什么一个数字出现在零。 它并没有和答案都没有回答为什么他们被转换的问题,只是他们被转换。 – user3315127

回答

2

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

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

相关问题