「4.2.2. 整数演算」の編集履歴(バックアップ)一覧に戻る
4.2.2. 整数演算 - (2012/09/10 (月) 08:03:10) の編集履歴(バックアップ)
4. 型と値と変数
4.1. 型と変数の種類
4.2. プリミティブ型と値
4.2.1. 整数型と値
4.2.2. 整数演算
Javaプログラミング言語は整数値に対する演算として以下を提供しています。:
- 比較演算子はboolean型の値を返します。:
- 数値演算子はint型もしくはlong型を返します。
- 単項プラス演算子+、単項マイナス演算子-
- 乗法演算子*と/と%
- 加法演算子+と-
- インクリメント演算子、前置と後置の両方をサポート
- デクリメント演算子、前置と後置の両方をサポート
- 符号付きまたは符号なしシフト演算子<<と>>と>>>
- ビット単位補数演算子~
- 整数ビット単位演算子&と^と|
- 条件演算子? :
- キャスト演算子、整数値を指定された数値型の値に変換します
- 文字列結合演算子+、Stringオペランドと整数オペランドを与えると整数オペランドの値を表す10進数のString表現に変換し2つの文字列を結合して新たなString型を作成します
他にも便利なコンストラクターやメソッドや定数がByte、Short、Int、Long、Characterクラス内に定義されています。
シフト演算子以外の整数演算子で少なくとも一つのオペランドがlong型があれば、演算は64ビット精度で行われ、数値演算子の戻り値はlong型になります。他のオペランドがlong型でなければ、数値昇格によって最初にlong型に拡幅されます。
そうでなければ、演算は32ビット精度で行われ、数値演算子の戻り値はint型になります。オペランドがint型でなければ、数値昇格によって最初にint型に拡幅されます。
整数型の任意の値を任意の数値型へキャストしたり、任意の数値型の値からキャストして整数型の任意の値を得ることができます。boolean型と整数型の間はキャストできません。
整数式をbooleanに変換する方法は4.2.5.を参照してください。
整数演算子はいかなる形であれオーバーフローとアンダーフローを検出しません。
整数演算子は以下の場合において例外をスローします。:
- ヌル参照のボックス化解除変換が行われる場合、整数演算子はNullPointerExceptionをスローする。
- 除算演算子/および剰余演算子%で右オペランドがゼロの場合、ArithmeticExceptionをスローする。
- インクリメント演算子++(15.14.2.、15.15.1.)とデクリメント演算子--(15.14.3.、15.15.2.)でボックス化変換が要求されたが実際に変換するのに必要なメモリーを確保できない場合、OutOfMemoryErrorをスローする。
class Test { public static void main(String[] args) { int i = 1000000; System.out.println(i * i); long l = i; System.out.println(l * l); System.out.println(20296 / (l - i)); } }
このプログラムは以下を出力します。:
-727379968 1000000000000
そしてこの後に、l-iはゼロなので、l-iによる除算でArithmeticExceptionが発生します。1番目の乗算は32ビット精度で行われ、2番目の乗算は64ビット精度で行われます。値-727379968は計算結果である1000000000000(int型には大きすぎる値です)の下32ビットの10進値です。