0

C++ Primer 说:

我们可以独立指定签名者和整数文字的大小。如果后缀包含 U,则文字具有无符号类型,因此带有 U 后缀的十进制、八进制或十六进制文字具有适合文字值的最小类型 unsigned int、unsigned long 或 unsigned long long

当一个人宣布

int i = -12U;

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

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

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

4

3 回答 3

4

您将 unsigned int 分配回有符号 int,因此它会再次转换。

就像你这样做:

int i = (int)(unsigned int)(-12);
于 2012-08-18T16:43:17.430 回答
1

u有效地比 更紧密地结合-。你得到-(12u).

于 2012-08-18T16:43:43.590 回答
1

12具有 int 类型和值 12。

12U具有 unsigned int 类型和值 12。

-12U具有 unsigned int 类型和值std::numeric_limits<unsigned int>::max()+ 1 - 12。

int i = -12U;应用实现定义的转换将 -12U 转换为 int 类型。

于 2012-08-18T22:25:38.727 回答