Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;11零值有符号整数的一元负号为零的标准保证?_C++_C++11_Integer_Arithmetic Expressions_Unary Operator - Fatal编程技术网

C++ C++;11零值有符号整数的一元负号为零的标准保证?

C++ C++;11零值有符号整数的一元负号为零的标准保证?,c++,c++11,integer,arithmetic-expressions,unary-operator,C++,C++11,Integer,Arithmetic Expressions,Unary Operator,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); 我知道-0和0在两种恭维表示法中是相同的,但我想知道,对于其他表示法,例如恭维或有符号幅度,标准是否允许有符号整数零的反为负零 我在C++11草

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);
我知道
-0
0
在两种恭维表示法中是相同的,但我想知道,对于其他表示法,例如恭维或有符号幅度,标准是否允许有符号整数零的反为负零

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

一元运算符的操作数应具有算术或非运算范围 枚举类型和结果是其操作数的反运算。 对整数或枚举操作数执行整数提升。 无符号量的负数是通过减去其 值,其中n是提升操作数中的位数。 结果的类型是提升的操作数的类型

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

动机:我正在为一个库编写一个专门的整数解析器(最终可能是开源的),我想知道我是否应该关注
“-0”
在不常见的体系结构上被解释为负零符号整数的可能性


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

该标准不要求整数采用位模式,因为它适用于尽可能广泛的机器。一个C++编译器完全可以使用一个补码,其中零和负零点是不同的。在汇编中不存在< /p> - 0,一旦设置了符号位,x86/x64中就没有零值。好的问题。无论如何,我不知道代码“0”/代码>是否被视为“未签名的数量”,即使是“代码> 0 < /C>的数据类型被签名。在C++级别,它可能被定义,但是它将如何实现?您发布的代码将在程序集生成中将0和-0设置为相同的值。在机器级别上没有-0。任何在引擎盖下使用twos补码的系统都没有表示负零的内部方式,最后我听说twos补码无处不在,几乎是通用的。C标准规定了可能产生负零的有限操作集。一元
-
不在该集中。(见6.2.6.2第3段。)我在C++11标准中没有看到任何类似的措辞。在C语言中,负零是一种表示,而不是一个值本身,它与普通零相比是相等的。(当然它不存在于2的补码中。)它需要重新定义它的所有数学,这是不可能的(也是无用的)。@MichaelChourdakis我不明白为什么会这样。我使用了一个1补码处理器,我向你保证数学不是不可能的。例如,你会破坏所有1-1函数,因为一个y将有两个X。@MarkRansom我知道标准并不强制要求位模式,但它可以强制要求算术表达式的结果。我不太精通标准语,不知道后者是否属实。我的理解是(C2x可能也会)。当然,这个问题是关于C++11的。