―Javaプログラミングの前提知識―

@ITハイブックス編
2003/3/27
Javaプログラミング
ワンポイントレクチャーについて

   演算子

   ワンポイントQuestion

 次のプログラムを実行したときの結果として正しいものはどれですか? (単一選択)

class q21 {
  public static void main(String[] args) {
    int x=5;
    int y=-3;
    int result=1;
    result -= x++ * --y;
    System.out.println(result);
  }
}


A -19
B 16
C 19
D 20
E 21

   演算子

 Java言語で利用できる演算子は、C/C++言語とよく似ています。下表は、Java言語の演算子の一覧で、演算の優先順位の高低もあらわしています。

優先順位 演算子 結合性
高い . [] () 右 → 左
++ -- + - ~ ! (キャスト) 右 → 左
* / % 左 → 右
+ - 左 → 右
<< >> >>> 左 → 右
< > <= >= instanceof 左 → 右
== != 左 → 右
& 左 → 右
^ 左 → 右
| 左 → 右
&& 左 → 右
|| 左 → 右
?: 右 → 左
低い = *= /= %= -= <<= >>= >>>= &= ^= |= 右 → 左

 以下に、各演算子の詳細について演算の優先度の順に説明します。

(1)算術演算子   

*(掛け算)、/(割り算)、%(割り算の余り)、+(足し算)、-(引き算)

 なお、前出の表中の4行目の+、-が算術演算子をあらわしており、2行目の+、-は単項演算子で符号の反転に利用します。

(2)比較演算子   

<(小なり、〜より小さい)、>(大なり、〜より大きい)
<=(小なりイコール)、>=(大なりイコール)
==(等しい) !=(等しくない)

(3)論理演算子   

&(論理積、AND)、|(論理和、OR)、^(排他的論理和、XOR)、!(否定、NOT)

(4)ショートサーキット演算子   

&&(論理積、AND)、||(論理和、OR)

(5)ビット操作演算子

 以下に、ビット操作演算子を示します。

>> n 符号ビット(左端の1ビット)はそのままで、左端の2ビット目からnビット右シフトし、あいた部分に符号ビットを埋めます
>>> n 符号を意識せずにnビット右シフトし、あいた部分に0を埋めます
<< n nビット左シフトし、右端のあいた部分に0を埋めます
~ n 補数です。ビットの反転をします

 次の表は、ビット操作演算子を利用した例です。

X 1111 0110 1101 0011
x >> 3 1111 1110 1101 1010
x >>> 2 0011 1101 1011 0100
x << 1 1110 1101 1010 0110
~x 0000 1001 0010 1100

(6)再帰演算子

 代表的な例を下表に示します。

x *= y; x = x * y;
x /= y; x = x / y;
x %= y; x = x % y;
x += y; x = x + y;
x -= y; x = x - y;

(7)インクリメント・デクリメント演算子

 以下に、インクリメント演算子とデクリメント演算子を示します。

x++; xを評価してからx+1に更新します
++x; x+1に更新してから評価します
x--; xを評価してからx-1に更新します
--x; x-1に更新してから評価します

(8)条件演算子   

条件式 ? trueの場合の値 : falseの場合の値

 条件のtrue/falseの状態により1つの値を設定します。   

v = w > x ? y : z ;

 上記の例は、w > xがtrueであればv = y;、falseであればv = z;となり、次と同様になります。

if ( w > x)
    v = y;
else
    v = z;

(9)instanceof演算子

 左右で指定された型を比較し、一致した場合trueを、一致しない場合falseを返します。

POINT

インクリメント・デクリメント演算子をほかの演算子と組み合わせて使用した場合、演算子が実行される順序はその位置によって変わってきます。

class sample21 {
  public static void main(String[] args) {
    int x, y, z;
    x=20;
    y=10;
    z=y++*x;
    System.out.println("y="+y+" z="+z);
  }
}

[実行結果]
y=11 z=200
(y=11、z=10*20=200になります)

class sample21 {
  public static void main(String[] args) {
    int x, y, z;
    x=20;
    y=10;
    z=++y*x;
    System.out.println("y="+y+" z="+z);
  }
}

[実行結果]
y=11 z=220
(y=11、z=11*20=220になります)


   ワンポイントQuestionの解答

正解 E

Java2ラーニングブック −310-035 編−

本記事は@ITハイブックスシリーズ「Java2ラーニングブック −310-035 編−」(技術評論社)から、一部の内容を編集し転載したものです。本書の詳細は「@ITハイブックス」サイトでご覧いただけます。

 

Javaプログラミング・ワンポイントレクチャー INDEX





Java Agile フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Java Agile 記事ランキング

本日 月間