C++11 标准是否保证零值有符号整数的一元减号为零?

Does the C++11 standard guarantee that the unary minus of a zero-valued signed integer is zero?

本文关键字:一元 整数 是否 标准 C++11 符号      更新时间:2023-10-16

C++11 标准是否保证零值有符号整数的一元减号为零?

例如:

int zero = 0;
int n = -zero;
int m = -0;
assert(memcmp(&n, &zero, sizeof(int)) == 0);
assert(memcmp(&m, &zero, sizeof(int)) == 0);

我知道-00在二的赞美表示中是相同的,但我想知道标准是否允许对其他表示的有符号整数零的否定为负零,例如一个人的赞美或有符号幅度。

我在 C++11 草案中所能找到的只是 §5.3.1 第 8 段:

一元运算符的操作数应具有算术或无作用域 枚举类型,结果是对其操作数的否定。 整型提升对整型或枚举操作数执行。 无符号量的负数是通过减去其 值从 2^n 开始,其中 n 是提升的操作数中的位数。 结果的类型是升级的操作数的类型。

我在草案中找不到否定的定义。

动机:我正在为一个库编写一个专门的整数解析器(最终可能是开源的(,我想知道我是否应该担心在不常见的架构上"-0"被解释为负零有符号整数的可能性。

注意:我已经知道负零浮点数。

该标准不强制要求整数的位模式,因为它适用于尽可能广泛的机器。 C++编译器完全有可能使用 one-补码,其中零和负零会有所不同。