C++セミナー(初級)演算子

HOME->講習会->プログラミングセミナー->C++セミナー(初級)


変数にデータを取り込むことができたら,実際に計算をさせてみましょう.

目次

算術演算子と論理演算子
演算優先度
キャスト
標準数学関数
演習

演算子

一般的な四則演算をするための算術演算子と2進数の論理演算を計算するための論理演算子(ビット演算子),大小関係など比較するための比較演算子があります.

演算子動作
A+BA+B
A-BAB
A*BA×B
A/BA÷B
A%BAmodB
A=BA=B
A+=BA=A+B
A-=BA=AB
A*=BA=A×B
A/=BA=A÷B
A%=BA=AmodB
A|BAB(すべてのビットに対して)
A&BAB(すべてのビットに対して)
A^BAB(すべてのビットに対して)
~AA¯(すべてのビットに対して)
A||BAB
A&&BAB
A<<BAをBだけ左シフト演算
A>>BAをBだけ右シフト演算
A|=BA=AB
A&=BA=AB
A^=BA=AB
A<<=BAをBだけ左シフト演算してAに代入
A>>=BAをBだけ右シフト演算してAに代入
A++後置増分(Aに1bit加算)
A – – 後置減分(Aに1bit減算)
++A前置増分(Aに1bit加算)
– – A前置減分(Aに1bit減算)
A==BAとBが一致のときtrue(1),
そうでないときfalse(0)
A!=BAとBが不一致のときtrue(1),
そうでないときfalse(0)
A<BAがB未満のときtrue(1),
そうでないときfalse(0)
A<=BAがBが以下のときtrue(1),
そうでないときfalse(0)
A>BAがB超過のときtrue(1),
そうでないときfalse(0)
A>=BAがB以上のときtrue(1),
そうでないときfalse(0)

演算子優先度

一般的な数式のように演算子によって計算順序に決まっています.また,C++においては,計算順序が左から右に流れるだけではなく,右から左に流れるものがあります.以下に,演算子の優先順位を示します.一部,紹介していないものが含まれますが,今後扱うことになるので記載しておきます.

優先度演算子動作結合の向き
1()
[]
->
.
++
– –
関数呼び出し
配列の要素
ポインタからの構造体メンバアクセス
構造体メンバアクセス
後置増分
後置減分
左から右
2!
~
++

*
&
論理否定
ビット論理否定
前置増分
前置減分
ポインタ間接参照
メモリアドレス参照
右から左
3(型名)キャスト右から左
4*
/
%
乗算
除算
剰余
左から右
5+
加算
減算
左から右
6<<
>>
左シフト演算
右シフト演算
左から右
7<
<=
>
>=
左が右未満
左が右以下
左が右超過
左が右以上
左から右
8==
!=
等しい
等しくない
左から右
9&ビット論理積左から右
10^ビット排他的論理和左から右
11|ビット論理和左から右
12&&論理積左から右
13||論理和左から右
14=
+=
-=
*=
/=
%=
<<=
>>=
&=
|=
^=
代入
加算代入
減算代入
乗算代入
除算代入
剰余代入
左シフト代入
右シフト代入
ビット論理積代入
ビット論理和代入
ビット排他的論理和代入
右から左

キャスト

異なる変数型で計算をするときは,キャストと呼ばれるものを使用することが必要である.例えば,整数型と浮動小数点数型の変数で除算を行った際に,小数部が切り捨てられて計算される場合があります.このような時はキャストを使用します.

#include <iostream>
int main()
{
    int i=5;
    double pi=3.14;
    double ans=(double)i/pi;
    std::cout << ans << std::endl;
}

上記のように,変数の型を一時的に変換した変数の前に「(変数型)」というように記述することで,int型変数iを一時的にdouble型変数に置き換えることができます.

標準数学関数

演算子とは異なりますが,基本的な数学関数(三角関数や指数関数など)は,標準ライブラリとして用意されています.使用する際には,「cmath」をincludeします.一例を以下に示します.「C++ 対数関数」というように調べると基本的な数学関数の情報はあります.

関数動作
std::sin(x)sin(x)
std::cos(x)cos(x)
std::tan(x)tan(x)
std::asin(x)sin1(x)
std::acos(x)cos1(x)
std::atan(x)tan1(x)
std::atan2(y,x)xyがなす角をπθπで出力
std::pow(x,a)xa
std::log(x)log(x)
std::log10(x)log10(x)
std::sqrt(x)x

例えば,入力された2つの値x,yから,角度θ[\degree]を表示するには以下のようになります.

#include <iostream>
#include <cmath>
int main()
{
    double x,y;
    std::cin >> x >> y;
    std::cout << std::atan2(y,x)*180/M_PI << std::endl;
}

cmathに実装されている三角関数はラジアンで扱うので注意が必要です.また,cmathには円周率が定義されており,「M_PI」が円周率となります.

演習

1.2つの入力された値x,yにおいて,x2+y2を出力せよ.ただし,計算式は1行で記述し,標準数学関数ライブラリは用いてもよい.

2.3つの入力された値a,b,cにおいて,b+b24ac2aを出力せよ.ただし,計算式は1行で記述し,標準数学関数ライブラリは用いてもよい.