What happens if I assign a negative value to an unsigned variable?(如果我为无符号变量分配负值会发生什么?)
问题描述
我很想知道如果我将一个负值赋给一个无符号变量会发生什么.
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
n
is 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.
这篇关于如果我为无符号变量分配负值会发生什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如果我为无符号变量分配负值会发生什么?


- 与 int by int 相比,为什么执行 float by float 矩阵乘法更快? 2021-01-01
- 使用/clr 时出现 LNK2022 错误 2022-01-01
- 近似搜索的工作原理 2021-01-01
- Stroustrup 的 Simple_window.h 2022-01-01
- C++ 协变模板 2021-01-01
- 一起使用 MPI 和 OpenCV 时出现分段错误 2022-01-01
- 从python回调到c++的选项 2022-11-16
- 如何对自定义类的向量使用std::find()? 2022-11-07
- STL 中有 dereference_iterator 吗? 2022-01-01
- 静态初始化顺序失败 2022-01-01