【发布时间】:2019-10-07 18:42:20
【问题描述】:
这段代码给出了有意义的输出
#include <iostream>
int main() {
unsigned int ui = 100;
unsigned int negative_ui = -22u;
std::cout << ui + negative_ui << std::endl;
}
输出:
78
变量negative_ui 存储-22,但它是unsigned int。
我的问题是为什么unsigned int negative_ui = -22u; 有效。
unsigned int 如何存储负数?是保存使用还是会产生未定义的行为?
我使用英特尔编译器 18.0.3。使用选项 -Wall 不会出现警告。
附言。我读过What happens if I assign a negative value to an unsigned variable? 和Why unsigned int contained negative number
【问题讨论】:
-
不适用于 MSVC 2019:错误 C4146:一元减号运算符应用于无符号类型,结果仍无符号
-
不安全而且没用。不要在这样的事情上浪费你的时间。
-
请解释this 为何尚未回答您的第一个问题。对于您的问题 2 和 3:
unsigned不能存储负数,“保存”是什么意思? -
iirc,解析器将:
-视为一元减号,22u视为无符号。所以它是“二十二的一元减运算”。它不被解析为-22u(负二十二)。我必须进行实验才能看到后果。 -
22u的类型为unsigned int,正如预期的那样。-22u也有unsigned int类型,这可能违反直觉。结果是-22u不是负数。
标签: c++ unsigned-integer