未分類

式と演算子

投稿日:

式のしくみを知る

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

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

関連記事

サンプルイメージ

List、Mapインターフェイス

     ArrayListとは、配列とよく似ています。値の集合を扱うときに利用します。 リストは要素が追加された順番を保持します。又重複した要素もそのまま保持することができます。 下記のコードでは、 …

Androidで神経衰弱ゲームつくりました。

       プログラムの解説 14行目のT[ ]はカードをシャッフルする領域です。 Tebanは、プログラムを制御する領域です。  0の時は、1枚目のカードをクリックします。 1の時は、2枚目のカー …

サンプルイメージ

継承

    継承のしくみを知る これまでは、「キャラクタ」の機能をまとめたクラスを使って、プログラムを作成してきました。この章では、さらに、新しいプログラムを作成していくことにしましょう。 5種類の格闘ゲ …

サンプルイメージ

練習問題(配列)

練習7-1   BirthStone.java 誕生月を入力すると、その月の誕生石を表示するプログラムを、下の空欄を埋めて作成してください。 練習7-2   DispArray1.java 以下のプロ …

サンプルイメージ

配列の応用

配列の要素数を調べるコードを記述します。配列の要素数(ハコの数)は、配列の長さ(大きさ)と呼ばれています。 Javaでは、配列要素に.(ピリオド)をはさんでlengthと記述すると、配列の要素数をあら …