未分類

式と演算子

投稿日:

式のしくみを知る

Javaの「式」の多くは、

演算子(演算するもの)とオペランド(演算の対象)

を組み合わせてつくられています。たとえば、「1 + 2」の場合は、「+」が演算子、「1」と「2」がオペランドにあたります。

「1+2」という式を記述しました。計算式は()でくくっておきましょう。実行結果は「3」が出力されます。次も同じように「3*4」という式で記述しています。これは「3×4」という式を意味しています。

いろいろな演算をする

演算の対象となるものは、1や2といった一定の数ばかりではありません。

7行目と13行目で変数をオペランドとして使った式を記述しています。

まず、sum = num1 + num2は、変数num1と変数2に記憶されている「値」どうしのたし算を行い、その値を変数sumに代入する

次に、num1 = num1 + 1は、変数num1の値に1をたし、その値を再度num1に代入するという式です。

=記号は「等しい」という意味ではなく、「値を代入する」という機能をもつものでした。

いろいろな演算子

主な演算子の種類を次の表に示します。

  • +  加算(文字列連結)     ++  インクリメント
  • -  減算            –   デクリメント
  • *  乗算           >  より大きい
  • /  除算           >= 以上
  • % 剰余           < 未満
  • + プラス(単項)        <= 以下
  • - マイナス(単項)       == 等価
  • ~ 補数(単項)         !=非等価
  • & ビット論理積        instanceof 型比較
  • | ビット論理和        ! 論理否定(単項)
  • ^ ビット排他的論理和     && 論理積
  • << 左シフト         || 論理和
  • << 右シフト         ? : 条件
  • >>> 符号なし右シフト   new オブジェクト生成

最後の「%演算子」(剰余演算子)という演算子はあまり使わないと思います。

num1 ÷ num2 = ●…あまり×

という計算で「×」の値です。つまり、あまりの数を求める演算子です。

インクリメント・デクリメント演算子

a++;

上記の、++演算子は、インクリメント演算子と呼びます。値を1増やす演算のことです。つまり、下記のコードと同じ処理を行っていることになります。

a = a + 1;

一方、-を2つ続けた「–」はデクリメント演算子と呼びます。

b–;

下記のコードと同じ意味です。

b = b – 1;

インクリメント・デクリメントの前置と後置

インクリメント・デクリメント演算子は、オペランドの前と後ろのどちらにでも記述することができます。つまり、変数aをインクリメントする場合は、

  • a++
  • ++a

という2つの書き方ができるのです。後ろに置く場合と前に置く場合、変数を1増やすだけならどちらの書き方でも同じです。

しかし、表記の違いによってプログラムの実行結果が異なる場合もあります。

ここでは、後置インクリメント演算子を使ってみました。これを、前置インクリメント演算子にすると、実行結果が異なります。7行目のコードを

b = ++a;に変更し実行してみましょう。

はじめに使った後置インクリメント演算子では、変数bにaの値を代入してから → aの値を1増やす

という処理でしたが、前置インクリメント演算子は、aの値を1増やしてから → 変数bにaの値を代入する

という逆の処理が行われます。このために、出力される変数bの値が異なるのです。

代入演算子

代入演算子は = だけではなく、= とほかの演算を組み合わせたバリエーションもあります。次の表に一覧にしています。

  • +=            加算代入
  • -=            減算代入
  • *=            乗算代入
  • /=            除算代入
  • %=           剰余代入
  • &=            論理積代入
  • |=            論理和
  • ^=            排他的論理和代入
  • <<=           左シフト代入
  • >>=           右シフト代入
  • >>>=          符号なし右シフト代入

これらの代入演算子は、ほかの演算と代入を同時に行うための複合的な演算子となっています。

a += b;     a+bの値をaに代入します。

変数aの値に変数bの値をたし算し、その値を変数aに代入するという演算を行います。+演算子と=演算子の機能をあわせた機能をもっています。

ためしに、+=演算子を使ってコードを記述してみましょう。

入力した3つの数値のたし算の結果を、+=演算子を使って順番に変数sumに格納しています。

シフト演算子

「<<」、「>>」、「>>>」という記号で示したシフト演算子とは、

数値を2進数であらわし左か右に指定数だけずらすことです。

「5<<2」という左シフト演算を行いましょう。

  •   5  0000000000000101
  • <<2
  •  20  0000000000010100

つまり、5<<2は20となります。一方、>>演算子は、右シフト演算と呼ばれる演算です。

>>演算子は、右辺で指定した桁数を右にずらし、はみだした桁数だけ正の数ならば0、負の数ならば左端から1を入れる

5>>2では次のようになります。

  •   5   0000000000000101
  • >>2
  •   1   0000000000000001

正負にかかわらず左端から0を入れる右シフト演算を行う>>>があります。

-未分類

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

Android 練習問題(タッチイベント)

     以下の様な動作をするアプリを作成してください。 問題2-1 TouchMove 初期表示時 画像上をタップすると画像が半透明で表示される。 画像上をタップしたまま指をスライドさせると画像が移 …

サンプルイメージ

練習問題(クラスの機能)

      練習9-1 下図の様な実行結果となるように下のプログラムの空欄を埋めて実行してください。 練習9-2 下記のような実行結果となるようにShohinクラスを作成してください。 練習9-3 下 …

サンプルイメージ

練習問題(for)解答例

以下に問題の解答例を記述します。 いかがでしょうか。多くの人は文法は理解できたが、それをどこでどのように使えばいいのかわからないと思っている人がほとんどでしょう。 何かを作成するまで処理の流れや組み合 …

サンプルイメージ

論理演算子

これまでいろいろな条件判断文を記述してきました。もっと複雑な条件を書ければ便利な場合があります。 スコアが「Sランク」であり、かつ、ゴールドがあったら・・・ →最強の装備にする このような複雑な条件を …

サンプルイメージ

練習問題(インターフェイス)

     練習11-1 下記のコードの実行結果がどう出力されるかを答えてください。 練習11-2 Shape.java 図形を表すインターフェイスShapeを作成してください。このインターフェイスでは …