C++ 编译器和负数表示法
最近,我被这件事弄糊涂了。可能是因为我没有阅读语言规范(我知道这是我的错) C99标准并没有规定编译器应该使用哪种负数表示。我一直认为存储负数的唯一正确方法是二的补码(在大多数情况下) 所以我的问题是:你知道现在有哪种编译器默认实现补码或符号大小表示吗?我们可以用一些编译器标志来更改默认表示吗 确定使用哪种表示的最简单方法是什么C++ 编译器和负数表示法,c++,c,compiler-construction,representation,negative-number,C++,C,Compiler Construction,Representation,Negative Number,最近,我被这件事弄糊涂了。可能是因为我没有阅读语言规范(我知道这是我的错) C99标准并没有规定编译器应该使用哪种负数表示。我一直认为存储负数的唯一正确方法是二的补码(在大多数情况下) 所以我的问题是:你知道现在有哪种编译器默认实现补码或符号大小表示吗?我们可以用一些编译器标志来更改默认表示吗 确定使用哪种表示的最简单方法是什么 和C++标准?我认为这不是一个问题,而是编译器使用什么表示,而是底层机器使用什么表示。如果编译器选择目标机器不支持的表示形式,那将是非常愚蠢的,因为这将引入大量开销,而
和C++标准?
我认为这不是一个问题,而是编译器使用什么表示,而是底层机器使用什么表示。如果编译器选择目标机器不支持的表示形式,那将是非常愚蠢的,因为这将引入大量开销,而不会带来任何好处 IP协议套件中的某些校验和字段使用一个补码,因此可能需要专用的“网络加速器”类型的CPU来实现它。虽然表示法是目前为止最常见的,但它不是唯一的表示法()。C和C++标准化委员会不希望非二进制补码机器模拟非本地表示。因此,C和C++都不需要特定的负整数格式。 这导致了在有符号类型上按位操作的未定义行为。实现补码数学的,仍然与一些相当更新的编译器一起使用。你可以在下面的问题中了解更多