在文字,无符号负数的类型上

时间:2012-08-18 16:41:27

标签: c++ literals unsigned

C ++ Primer说:

  

我们可以独立指定signedees和一个整数的大小   文字。如果后缀包含U,则文字具有无符号   type,所以带有U后缀的十进制,八进制或十六进制文字   unsigned int的最小类型,unsigned long或unsigned long long   其中文字的值适合

当一个人宣布

int i = -12U;

我理解的方式是-12转换为自身的unsigned版本(4294967284),然后分配给int,使结果成为一个非常大的正数由于翻滚。

这似乎不会发生。我错过了什么?

cout << i << endl; // -12

3 个答案:

答案 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类型。