コンピュータは、いろいろな計算を行っています。今回は、四則演算のような式について解説します。
演算子とオペランド
1+2 といった数式をC言語でも使っていきます。
+ のような演算するものを演算子といい、1 などの演算の対象を オペランドといいます。
C言語で演算する際は、このような演算子とオペランドの組み合わせで式が作られていきます。
次は四則演算したソースコードになります。
#include <stdio.h>
int main(void)
{
int number1 = 10;
int number2 = 5;
printf("1 + 2 = %d\n", 1 + 2); // 加算
printf("1 × 2 = %d\n", 1 * 2); // 乗算
printf("1 - 2 = %d\n", 1 - 2); // 減算
printf("6 ÷ 3 = %d\n", 6 / 3); // 除算
printf("1 %% 2 = %d\n", 1 % 2); // 剰余
printf("number1 + number2 = %d\n", number1 + number2); // 加算
printf("number1 × number2 = %d\n", number1 * number2); // 乗算
printf("number1 - number2 = %d\n", number1 - number2); // 減算
printf("number1 ÷ number2 = %d\n", number1 / number2); // 除算
printf("number1 %% number2 = %d\n", number1 % number2); // 剰余
return 0;
}1 + 2 = 3
1 × 2 = 2
1 - 2 = -1
6 ÷ 3 = 2
1 % 2 = 1
number1 + number2 = 15
number1 × number2 = 50
number1 - number2 = 5
number1 ÷ number2 = 2
number1 % number2 = 0足し算、かけ算、ひき算、わり算を値と変数でそれぞれ行っています。最後に % があり、これはなじみがないかもしれません。
% は剰余という演算子は、あまりの数を求める演算子です。
1÷2=0 で、余りは、1になります。よって答えが1になります。
変数では、10÷5=2で、余りは、0になります。よって答えが0になります。
このようにあまりを求める際は、% 演算子を使用します。
このサンプルでは、値同士、変数同士で演算していますが、もちろん、値と変数で演算もできます。
このように値だけでなく、変数もオペランドすることもできます。
%の表示について
文字列に%%と%が2つ連続して記述してます。これは、%は書式指定子で使用するため、文字としての%を区別する使用する必要があり、%%と記述することになっています。
いろいろな演算
さきほどは、計算した値を出力するのみでしたが、計算結果を変数に代入することや、変数と値の組み合わせで計算するなど、いろんなバリエーションをプログラミングしたいと思います。
#include <stdio.h>
int main(void)
{
int sum;
int number1 = 10;
int number2 = 5;
sum = number1 + number2;
printf("変数sumの値は、%dです。\n", sum);
number1 = number1 + 1;
number2 = number1 + number2;
printf("変数number1の値は、%dです。\n", number1);
printf("変数number2の値は、%dです。\n", number2);
return 0;
}変数sumの値は、15です。
変数number1の値は、11です。
変数number2の値は、16です。9行目では、number1の10とnumber2の5をたし算した結果をsumに代入しているため、sumの値は、15になります。
13行目では、number1の10に1をたし算した結果をnumber1に代入しているため、number1は11が上書きされます。
14行目では、number1は13行目で11になったので、その値とnumber2の5をたし算しているため、number2は16が上書きされます。
ほんの一例ですが、このように演算子とオペランドを複数組み合わせることで、いろんなバリエーションの演算が行えるようになります。
代入演算子
次に代入演算子について解説します。
これまで、変数に値を代入する際に = を使ってきましたが、これが代入演算子です。
代入演算子は、= だけでなく、= とほかの演算子と組み合わせることで、ほかの演算と代入を同時におこなうことが可能になります。
たとえば、
number1 += 1; // number1 = number1 + 1
number1 -= number2; // number1 = number1 - number2
number1 *= 2; // number1 = number1 * 2
number1 /= 2; // number1 = number1 / 2
number1 %= 2; // number1 = number1 % 2それぞれのコメントにあるように、左辺の変数number1 に右辺の値を、=の左側の演算子で演算した結果を、左辺の変数number1に代入しています。
演算子の優先順位
1+ 2 * 3この場合、+演算子と*演算子が使われています。算数では、たし算よりかけ算のようを先に計算しますが、C言語でも同じです。答えは、7になります。
このように演算子には優先順位があります。
また、+演算子同士など、同じ優先順位では、左から順に計算されますが、こちらも算数ど同じです。
今まで登場した優先順位は、
*、/、%が同じ優先順位が高く、その次に、+、-が続きます。そして、代入演算子の = が一番優先順位が低くなっています。
優先順位を変えたいときは、こちらも算数と同様で、カッコを使って優先的に計算することができます。
(1 + 2) * 3このようにすることで、1 + 2が先に計算されて、その後に* 3が行われます。答えは、9になります。
インクリメント・デクリメント
次は、インクリメントとデクリメントです。
インクリメントは、変数の値を1増やすというもので、変数名++、または、++変数名と記述します。
デクリメントは、変数の値を1減らすというもので、変数名--、または、--変数名と記述します。
具体的には、次のとおりです。
#include <stdio.h>
int main(void)
{
int number1 = 5;
int number2 = 5;
number1++;
number2--;
printf("変数number1の値は、%dです。\n", number1);
printf("変数number2の値は、%dです。\n", number2);
++number1;
--number2;
printf("変数number1の値は、%dです。\n", number1);
printf("変数number2の値は、%dです。\n", number2);
return 0;
}変数number1の値は、6です。
変数number2の値は、4です。
変数number1の値は、7です。
変数number2の値は、3です。このように、変数に1を加算したり、1を減算したりする場合に使用します。
演算子が前にあっても、後ろにあっても結果は同じですが、代入する際の挙動が異なります。
#include <stdio.h>
int main(void)
{
int sum1;
int sum2;
int number1 = 5;
int number2 = 5;
sum1 = number1++;
sum2 = ++number2;
printf("変数sum1 の値は、%dです。\n", sum1);
printf("変数sum2 の値は、%dです。\n", sum2);
return 0;
}変数sum1 の値は、5です。
変数sum2 の値は、6です。sum1の値は、5です。これは、number1に1を加算する前に、sum1に代入されています。
一方、sum2の値は、6です。これは、number2に1を加算した後に、sum2に代入されています。
変数の後に演算子がある場合は、先に代入した後に、インクリメントされることを示していて、変数の前に演算子がある場合は、インクリメントした後に代入されることを示しています。
このように、変数の前に演算子がある場合と、後に演算子がある場合で挙動がことなるため、注意が必要です。
また、変数の前に演算子があるものを前置といい、変数の後に演算子があるものを後置といいます。
まとめ
- 演算子(+,-,*,/など)とオペランド(値、変数など)を組み合わせて式を作る。
- 代入演算子と組み合わせて、四則演算と代入を同時に行うことができる。
- 算数と同じように計算する優先順位がある。
- インクリメント、デクリメントを使用することで、1を加算、1を減算するこができる。