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

问题描述 投票:4回答:1

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是提升后的操作数中的位数。结果的类型就是提升的操作数的类型。

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

Motivation:我正在为一个库编写一个专门的整数解析器(可能最终会开源),我想知道是否应该担心"-0"被解释为一个负零有符号整数在罕见的体系结构上。

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

c++ c++11 integer arithmetic-expressions unary-operator
1个回答
0
投票

该标准不要求整数必须使用位模式,因为它旨在适用于尽可能广泛的机器。对于C ++编译器,完全有可能使用1补码,其中零和负零将不同。

© www.soinside.com 2019 - 2024. All rights reserved.