为什么签名的负数转换为无符号数?

时间:2014-02-16 05:14:36

标签: c++ unsigned-long-long-int

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

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

当我尝试将两者分开时,我得到结果为零只是因为某处某处正在将我的有符号数转换为无符号(意味着它必须是正数)。 >取代;

编辑。

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

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

1 个答案:

答案 0 :(得分:2)

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

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