如果我为无符号变量分配负值会发生什么?
我很想知道如果我将一个负值赋给一个无符号变量会发生什么.
I was curious to know what would happen if I assign a negative value to an unsigned variable.
代码看起来有点像这样.
The code will look somewhat like this.
unsigned int nVal = 0;
nVal = -5;
它没有给我任何编译器错误.当我运行程序时, nVal 被分配了一个奇怪的值!会不会是一些 2 的补码被分配给 nVal?
It didn't give me any compiler error. When I ran the program the nVal was assigned a strange value! Could it be that some 2's complement value gets assigned to nVal?
推荐答案
官方解答 - 第 4.7 节 conv.integral
For the official answer - Section 4.7 conv.integral
"如果目标类型是无符号的,则结果值是与源整数一致的最小无符号整数(模 2n 其中 n 是使用的位数表示无符号类型).[注意:在二进制补码表示中,这种转换是概念性的,位模式没有变化(如果没有截断).―结束注释]
"If the destination type is unsigned, the resulting value is the least unsigned integer congruent to the source integer (modulo 2n where
nis the number of bits used to represent the unsigned type). [ Note: In a two’s complement representation, this conversion is conceptual and there is no change in the bit pattern (if there is no truncation). ―end note ]
这实质上意味着,如果底层架构存储在非二进制补码的方法中(例如有符号幅度或二进制补码),则到无符号的转换必须表现得好像它是二进制补码一样.
This essentially means that if the underlying architecture stores in a method that is not Two's Complement (like Signed Magnitude, or One's Complement), that the conversion to unsigned must behave as if it was Two's Complement.
相关文章