最近我被这个问题弄糊涂了。也许是因为我没有阅读语言规范(这是我的错,我知道)。
C99 标准没有说明编译器应该使用哪种负数表示。我一直认为存储负数的唯一正确方法是二进制补码(在大多数情况下)。
所以这是我的问题:你知道任何现代编译器默认实现一个补码或符号幅度表示吗?我们可以用一些编译器标志来改变默认表示吗?
确定使用哪种表示的最简单方法是什么?
那么 C++ 标准呢?
最近我被这个问题弄糊涂了。也许是因为我没有阅读语言规范(这是我的错,我知道)。
C99 标准没有说明编译器应该使用哪种负数表示。我一直认为存储负数的唯一正确方法是二进制补码(在大多数情况下)。
所以这是我的问题:你知道任何现代编译器默认实现一个补码或符号幅度表示吗?我们可以用一些编译器标志来改变默认表示吗?
确定使用哪种表示的最简单方法是什么?
那么 C++ 标准呢?
我认为这不是编译器使用什么表示的问题,而是底层机器使用什么表示的问题。编译器选择目标机器不支持的表示是非常愚蠢的,因为这会引入大量开销而没有任何好处。
IP 协议套件中的某些校验和字段使用反码,因此也许专用的“网络加速器”型 CPU:s 实现它。
实现补码数学的UNISYS 2200 系列仍在与一些相当更新的编译器一起使用。您可以在以下问题中了解更多信息