最近我的这个问题。也许是因为我没有读语言规范(这是我的错,我知道)。

C99标准不说,其负数表示应该由编译器使用。我始终认为,存储负数的唯一正确途径是补(在大多数情况下)。

因此,这里是我的问题:你知道任何现今的编译器在默认情况下的补或登录幅度表示实现? ,我们可以用一些编译器标志更改默认表示

什么是确定使用哪个表示的最简单的方法是什么?

和什么约C ++标准?

有帮助吗?

解决方案

我认为这是没有这么多的编译器使用什么代表性问题,而是底层的机器使用什么表示。编译器将是非常笨挑不是由目标机器支持的表示,因为这将引入的开销的负载为没有任何好处。

在IP协议套件使用的一些校验字段一的补码,因此,或许专用的“网络加速器”型CPU:S。实施它

其他提示

虽然二进制补码表示是迄今为止最常见的,它不是只有一个(看到一些)。 C和C ++标准化委员会并不想要求非二进制补码机来模拟一个非原生表示。因此既不C未C ++要求特定的负整数格式。

这导致位操作的不确定的行为上符号类型。

UNISYS它实现一的补码算术2200系列时,仍处于采用。你可以阅读更多关于它在下面

问题

外来架构标准委员会关心

是否有的C任何非补码实现?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top