「short」の編集履歴(バックアップ)一覧はこちら

short - (2009/03/18 (水) 20:51:56) の1つ前との変更点

追加された行は緑色になります。

削除された行は赤色になります。

*short Javaにおいてshortはプリミティブ型の1つです。 shortはメモリ領域を16ビット確保します。 shortは符号付き整数を扱うので、2の15乗(32768)より、値の範囲は-32768~32767となります。 ---- **short 使用例 1 ShortSample1.java class ShortSample1 { public static void main(String [] args) { short shortMax = 32767; short shortMin = -32768; System.out.println("shortMax:" + shortMax); System.out.println("shortMin:" + shortMin); } } 実行結果 C:\java>javac ShortSample1.java C:\java>java ShortSample1 shortMax:32767 shortMin:-32768 ---- **short 値範囲を超えた場合 1 ShortSample2.java class ShortSample2 { public static void main(String [] args) { short shortMax = 32768; short shortMin = -32769; System.out.println("shortMax:" + shortMax); System.out.println("shortMin:" + shortMin); } } コンパイル結果 C:\java>javac ShortSample2.java ShortSample2.java:4: 精度が落ちている可能性 検出値 : int 期待値 : short short shortMax = 32768; ^ ShortSample2.java:5: 精度が落ちている可能性 検出値 : int 期待値 : short short shortMin = -32769; ^ エラー 2 個 以上のようにコンパイルエラーが起こります。 ---- **short 値範囲を超えた場合 2 ShortSample3.java class ShortSample { public static void main(String [] args) { short shortMax = 32767; short shortMin = -32768; System.out.println("shortMax - shortMin:" + (shortMax - shortMin)); } } 実行結果 C:\java>javac ShortSample3.java C:\java>java ShortSample3 shortMax - shortMin:65535 問題なく動きました。数値リテラルがint型なので、自動的に型の拡大変換が行われたのだと思います。 以下のプログラムで明示的にshortを指定して試してみます。 ---- **short 値範囲を超えた場合 3 ShortSample4.java class ShortSample4 { public static void main(String [] args) { short shortMax = 32767; short shortMin = -32768; System.out.println("shortMax - shortMin:" + (short)(shortMax - shortMin)); } } 実行結果 C:\java>javac ShortSample4.java C:\java>java ShortSample4 shortMax - shortMin:-1 上記プログラムは本来なら32767-(-32768)で shortの値範囲を超えてしまいエラーになりそうですが、shortの値は循環するそうです。 循環するので上記計算は 32767-(-32768) ↓ 32767+32768 ↓ 32768はshort型の範囲を超えているので超えた分が循環し-32768になる 32767-32768 ↓ -1 となることがわかります ----
*short Javaにおいてshortは[[プリミティブ型]]の1つです。 shortはメモリ領域を16ビット確保します。 shortは符号付き整数を扱うので、2の15乗(32768)より、値の範囲は-32768~32767となります。 ---- **short 使用例 1 ShortSample1.java class ShortSample1 { public static void main([[String]] [] args) { short shortMax = 32767; short shortMin = -32768; System.out.println("shortMax:" + shortMax); System.out.println("shortMin:" + shortMin); } } 実行結果 C:\java>javac ShortSample1.java C:\java>java ShortSample1 shortMax:32767 shortMin:-32768 ---- **short 値範囲を超えた場合 1 ShortSample2.java class ShortSample2 { public static void main(String [] args) { short shortMax = 32768; short shortMin = -32769; System.out.println("shortMax:" + shortMax); System.out.println("shortMin:" + shortMin); } } コンパイル結果 C:\java>javac ShortSample2.java ShortSample2.java:4: 精度が落ちている可能性 検出値 : [[int]] 期待値 : short short shortMax = 32768; ^ ShortSample2.java:5: 精度が落ちている可能性 検出値 : int 期待値 : short short shortMin = -32769; ^ エラー 2 個 以上のようにコンパイルエラーが起こります。 ---- **short 値範囲を超えた場合 2 ShortSample3.java class ShortSample { public static void main(String [] args) { short shortMax = 32767; short shortMin = -32768; System.out.println("shortMax - shortMin:" + (shortMax - shortMin)); } } 実行結果 C:\java>javac ShortSample3.java C:\java>java ShortSample3 shortMax - shortMin:65535 問題なく動きました。数値リテラルがint型なので、自動的に型の拡大変換が行われたのだと思います。 以下のプログラムで明示的にshortを指定して試してみます。 ---- **short 値範囲を超えた場合 3 ShortSample4.java class ShortSample4 { public static void main(String [] args) { short shortMax = 32767; short shortMin = -32768; System.out.println("shortMax - shortMin:" + (short)(shortMax - shortMin)); } } 実行結果 C:\java>javac ShortSample4.java C:\java>java ShortSample4 shortMax - shortMin:-1 上記プログラムは本来なら32767-(-32768)で shortの値範囲を超えてしまいエラーになりそうですが、shortの値は循環するそうです。 循環するので上記計算は 32767-(-32768) ↓ 32767+32768 ↓ 32768はshort型の範囲を超えているので超えた分が循環し-32768になる 32767-32768 ↓ -1 となることがわかります ----

表示オプション

横に並べて表示:
変化行の前後のみ表示:
ウィキ募集バナー