2012-12-04 13 views
5

私はとてもトリッキーなC#試験を準備していますが、その間にこの問題が発生しました。 私は次のコードを持っている:C#int32リテラルは長いデータ型でしか格納できません

uint zzz = -12u; 

-12uSystem.Uint32リテラルとして認識されているが、それは唯一のタイプlongの変数に格納することができます。何故ですか ?

+5

「u」が何を表しているか知っていますか? –

+3

符号なしのintは符号なしとされているので、私は推測していますか? –

+2

ヒント: "-12uがSystem.Uint32として認識されました"が間違っています。 「12uがSystem.Uint32として認識されている」と言うのは正しいでしょう。 – vcsjones

答えて

12

それがしていることは、unsigned int 12をとり、それを負の値(-)に変換しようとしています。この場合、unsigned intとして負の数を扱うことができる型に変換する必要があります。

unsigned intなので、intの範囲外の値がある可能性があるため、longへの変換が必要です。

+1

はい。 [整数リテラル仕様](http://msdn.microsoft.com/en-us/library/aa664674.aspx)を見ると、マイナス記号がリテラルの一部ではないことがわかります。 'uint'を呼び出し、それを否定するときに' long'に広げる必要があります。 – Rawling

+0

私が思っていたことをありがとう、ありがとう。 –

0

uをするためのものであるので、unsigned int型
取り扱いは、Longデータ型に変換署名-ve
-12uそれはlongデータ型を使用unsigned型に格納するための符号付き整数データ型&であるため

関連する問題