2016-11-15 2 views
1

のは、私は、この変数を宣言するとしましょう:誰かがL(長い)がそこになければならない理由を私に説明できますか?

私は数が整数のために大に明らかであるので、私は、エラーを取得することを行う場合
long k = 1060606060000; 

。コンパイラが長い変数であることを認識するために、最後にLを追加する必要があるのはなぜですか?私は明らかに、私は長いタイプのものにはkが必要だと言っていましたが。

+2

Lを追加すると、コンパイラに "hey btwはロングタイプです..."と伝えられます。 –

+0

なぜ、最初は長く追加するのは難しいですか? – Geddi

+0

@Geddi 'int'に収まるのに"明らかに "長すぎないような数字があった場合、' 0'のように、長いリテラルであることをどのように指定しますか?そして、長いリテラルを指定するには2つの方法があります。 –

答えて

2

リテラル値は常にintと解釈されるため、lまたはLが付加されていないと解釈されます。

lが指定されていない場合は、longの変数にリテラルintを割り当てます。

コンパイル時に、コンパイラはリテラル値を最初にチェックし、lまたはLが付加されていない場合は、intと解釈します。

ここで、数値がInteger.MAX_VALUEより大きい場合、コンパイラはエラーを表示します。

+0

しかし、私の数値はintの範囲を拡張する可能性があるので、私は明らかに私の変数を長く宣言しています。コンパイラがなぜ自動的に長時間にキャストしないのですか? – Geddi

+0

これを2段階のプロセスと見なしてください。最初にコンパイラはリテラルを調べ、リテラルの割り当てを参照に適用します。リテラル値を調べると、コンパイルエラー( 'L' /' l'が付加されていない場合)が発生します。 – Mena

+0

ありがとうございました。これに背景考えはありますか?私はこれが最も実用的な方法ではないように感じる? – Geddi

関連する問題