0

C++入門書によると:

署名者と整数リテラルのサイズを個別に指定できます。接尾辞にUが含まれている場合、リテラルはunsignedタイプであるため、U接尾辞を持つ10進数、8進数、または16進数のリテラルは、リテラルの値が適合するunsigned int、unsigned long、またはunsignedlonglongの最小タイプになります。

宣言するとき

int i = -12U;

私が理解しているように、-12はunsignedそれ自体のバージョン(4294967284)に変換されてから、に割り当てられ、intロールオーバーのために結果が非常に大きな正の数になります。

これは起こらないようです。何が足りないのですか?

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

4

3 に答える 3

4

unsignedintをsignedintに割り当てるので、再度変換されます。

それはあなたがこれをしたようなものです:

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タイプunsignedintと値12があります。

-12Uタイプはunsignedintで、値はstd::numeric_limits<unsigned int>::max()+1-12です。

int i = -12U;実装定義の変換を適用して、-12Uをint型に変換します。

于 2012-08-18T22:25:38.727 に答える