分かりづらい x=x+1, x+=1, x++, ++x の意味や違い、計算結果を解説

x=x+1のイメージ

JAVA、C言語やC++などのプログラミングに出てくる「x = x + 1」「x += 1」「x++」「++x」についてまとめました。

前半は「x = x + 1」「x += 1」「x++」は何なのか?、後半は「x++」と「++x」の違いについて紹介します。

x=x+1,x+=1,x++,++x名称はインクリメント 意味は「今の数字に1をたす」

x = x + 1とx += 1とx++の意味は全く一緒。※++xは少し違います。

数字の「10」と漢字の「十」と英語の「ten」みたいなものです。

意味は「今の数字に1をたす」で、名称は「インクリメント」です。

x = x + 1とx += 1よりも入力しやすいx++がよく使われます。

※以降はx = x + 1で説明しますが、x += 1またはx++に読み変えても問題ありません。

「x=x+1」はxに1をたしてxを上書きするイメージ

x=x+1のイメージ

「x=x+1は今の数字に1をたす」を上記の図で説明します。

上図では、まずx=3と定義しました。

x = x + 1は「今の数字に1をたす」意味なので、x = x + 1の行でxを新たに4と定義します。

以上がx = x + 1のイメージです。

「『x=x+1』が出たところで、xに1をたして上書き保存している」と言った方が分かりやすいかもしれないですね。

プログラミングでx=x+1を理解する

続いてx=x+1をプログラミングで理解しましょう。

ここではJAVAという言語で説明します。

以下はx=x+1を使って、xの値を出力するプログラムです。

※今回はJAVAのプログラムで紹介しますね。

x=x+1を使った計算プログラム(JAVA編)
class increment {
  public static void main (String[] args) {
    int x = 3; //xに3を代入
    System.out.println(x); //3が出力されます
 
    x = x + 1; //今のxに1を足して(右辺)、xの値を上書きしてる(左辺)
    System.out.println(x); //なので3に1を足した4が出力されます
 
    x = x + 1; //今のxに1を足して(右辺)、xの値を上書きしてる(左辺)
    System.out.println(x); //なので4に1を足した5が出力されます
    }
}

上記のプログラムを実行するとx=x+1があるたびに、xの値に1を加えます。

そしてSystem.out.println()で()の中身を出力します。

やっていることは次のプログラムと一緒です。

x=x+1を使わない計算プログラム(JAVA編)
class increment {
  public static void main (String[] args) {
    int x = 3; //xに3を代入
    System.out.println(x); //3が出力されます
 
    x = 4; //この行を書き換えました
    System.out.println(x); //4が出力されます
 
    x = 5; //ここの行を書き換えました
    System.out.println(x); //5が出力されます
  }
}

別にx=x+1を使わなくても記述できます。

それでもx=x+1を使う理由は、x=x+1を使った方プログラムがシンプルにまとまるからです。

処理を繰り返すfor文とx=x+1を使うと、かなりシンプルになります。

x=x+1を使った計算プログラム(JAVA編)
class increment {
  public static void main (String[] args) {
    for(int x = 3; x <= 5; x++){
      System.out.println(x);
    }
  }
}

仮に出力する数を3~5ではなく3~10にしたいときは、3行目の3を10に変えればいいです。

なのでムダに行数を増やさなくてもよく、修正も少なく済みます。

またプログラムはなるべく短い方が処理スピードも速いので重宝されます。

「x++」はx を代入した後で x に1を足し、「++x」はxに1を足して代入する

x++と++xのイメージ図

x++と++xは似てますが、1をたすタイミングが違います。

x++(後置インクリメント)は、まずxの値を代入し、次にxに1をたしてxを上書きする処理。

++x(前置インクリメント)は、まずxに1をたして上書きし、次にxの値を代入する処理です。

実際のプログラムを見た方がイメージしやすいですよ。

x++と++xの計算プログラム(JAVA編)
class increment {
  public static void main (String[] args) {
    int a = 3;  //aに3を代入
    int b = a++; //まずbにaの値の3を代入、次にaに1をたす
    System.out.println(b); //3が出力されます
    System.out.println(a); //4が出力されます
 
    int x = 3;  //xに3を代入
    int y = ++x; //まずxの値の3に1をたし、次にyにxを代入
    System.out.println(y); //4が出力されます
    System.out.println(x); //4が出力されます
   }
}

int b = a++ で、まずbにaの値の3が代入されます。

次に今のaに1をたして、aの値を4に上書きしています。

なので、System.out.println()という()の中身を出力するコマンドで

bは3が、aは4が出力されます。

また int y = ++x は、まずxの値の3に1をたして4に上書きします。

次に上書きしたxの値をyに代入します。

なので、y と x は4が出力されるのです。

x=x-1,x-=1,x–,–x(デクリメント)も考え方は同じです

x=x-1のイメージ

「x = x + 1」「x += 1」「x++」「++x」は「今の数字に1をたす」意味のインクリメントに似たものがあります。

「x = x – 1」「x -= 1」「x–」「–x」で「今の数字から1をひく」意味のデクリメントです。

x = x – 1 と x -= 1 と x– は同じです。

『x=x-1』が出たところで、xから1を引いて上書き保存しています。

実際にプログラムで見てみましょう。

x=x-1を使った計算プログラム(JAVA編)
class decrement {
  public static void main (String[] args) {
    int x = 3; //xに3を代入
    System.out.println(x); //3が出力されます
 
    x = x - 1; //今のxから1を引いて(右辺)、xの値を上書きしてる(左辺)
    System.out.println(x); //なので3から1を引いて2が出力されます
 
    x = x - 1; //今のxから1を引いて(右辺)、xの値を上書きしてる(左辺)
    System.out.println(x); //なので2から1を引いて1が出力されます
    }
}

「x–」はx を代入した後で x から1をひき、「–x」はx から 1をひいて代入する

x--と--xのイメージ図

※見づらいですが「–」は「-」2つ分のことです。

x–(後置デクリメント)は、まずxの値を代入し、次にxから1を引いてxを上書きする処理。

–x(前置デンクリメント)は、まずxから1を引いて上書きし、次にxの値を代入する処理です。

実際のプログラムを見た方がイメージしやすいですよ。

x--と--xの計算プログラム(JAVA編)
class decrement {
  public static void main (String[] args) {
    int a = 3;  //aに3を代入
    int b = a--; //まずbにaの値の3を代入、次にaから1をひく
    System.out.println(b); //3が出力されます
    System.out.println(a); //2が出力されます
 
    int x = 3;  //xに3を代入
    int y = --x; //まずxの値の3から1をひき、次にyにxを代入
    System.out.println(y); //2が出力されます
    System.out.println(x); //2が出力されます
   }
}

int b = a– で、まずbにaの値の3が代入されます。

次に今のaから1をひいて、aの値を2に上書きしています。

なので、System.out.println()という()の中身を出力するコマンドで

bは3が、aは2が出力されます。

また int y = –x は、まずxの値の3から1をひいて2に上書きします。

次に上書きしたxの値をyに代入します。

なので、y と x は2が出力されるのです。

コメントを残す

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