|
■No55679 (ふー さん) に返信
> ※未確認ですが。
確認してみました。
0x7FFFFFFF.GetType().FullName は "System.Int32" ですが、
0x80000000.GetType().FullName は "System.UInt32" ですし、
0xFFFFFFFF.GetType().FullName も "System.UInt32" ですね。
> 数値リテラルで最後に何もつけなかったら、intですよね。
int a = 0xFFFFFFFF; はエラーになります。
言語仕様書によれば、整数リテラルには
・10 進整数リテラル(decimal-integer-literal)
・16 進整数リテラル(hexadecimal-integer-literal)
の 2 種がありますが、そのいずれにおいても、
・サフィックスのないリテラルの場合は、int、uint、long、ulong のうち、
その値を表すことができる最初の型になります。
だそうです。そのため、0xFFFFFFFF は 0xFFFFFFFFU と同値として扱われます。
なお、負数に関しては
・値 2,147,483,648 を持ち integer-type-suffix が指定されていない decimal-integer-literal が、
単項マイナス演算子トークンの直後にトークンとして現れる場合、結果は値 -2,147,483,648 を持つ
int 型の定数になります。
それ以外のあらゆる状況では、このような decimal-integer-literal は uint 型になります。
・値 9,223,372,036,854,775,808 を持ち、integer-type-suffix が指定されていない、
または integer-type-suffix L か l が指定された decimal-integer-literal が、
単項マイナス演算子トークンの直後にトークンとして現れる場合、結果は
値 -9,223,372,036,854,775,808 を持つ long 型の定数になります。
それ以外のあらゆる状況では、このような decimal-integer-literal は ulong 型になります。
と記載されていました。
|