C ++ Primer说:
我们可以独立指定signedees和一个整数的大小 文字。如果后缀包含U,则文字具有无符号 type,所以带有U后缀的十进制,八进制或十六进制文字 unsigned int的最小类型,unsigned long或unsigned long long 其中文字的值适合
当一个人宣布
时 int i = -12U;
我理解的方式是-12转换为自身的unsigned
版本(4294967284
),然后分配给int
,使结果成为一个非常大的正数由于翻滚。
这似乎不会发生。我错过了什么?
cout << i << endl; // -12
答案 0 :(得分:2)
您正在将unsigned int分配给signed int,因此会再次转换。
就像你这样做了:
int i = (int)(unsigned int)(-12);
答案 1 :(得分:1)
u
比-
更有效地绑定。您将获得-(12u)
。
答案 2 :(得分:1)
12
的类型为int,值为12。
12U
的类型为unsigned int,值为12。
-12U
的类型为unsigned int,值为std::numeric_limits<unsigned int>::max()
+ 1 - 12.
int i = -12U;
应用实现定义的转换将-12U转换为int类型。