[[演算子]]とは、演算を表す記号のことです。また演算が作用する対象をオペランドといいます。 &bold(){目次} #contents() *算術演算子 2つのオペランドに対し、加算、減算などを行う演算子です。 #html2(){{{{{{ <TABLE border="1" cellspacing="0" cellpadding="2"> <TABLE border="1" cellspacing="0" cellpadding="2"> <TBODY> <TR> <TD style="background-color:#ddeeff;" align="center">演算子</TD> <TD style="background-color:#ddeeff;" align="center">意味</TD> <TD style="background-color:#ddeeff;" align="center">例</TD> <TD style="background-color:#ddeeff;" align="center">答え</TD> </TR> <TR> <TD style="">+</TD> <TD style="">加算</TD> <TD style="">1 + 2</TD> <TD style="">3</TD> </TR> <TR> <TD style="">-</TD> <TD style="">減算</TD> <TD style="">2 - 1</TD> <TD style="">1</TD> </TR> <TR> <TD style="">*</TD> <TD style="">乗算</TD> <TD style="">2 * 3</TD> <TD style="">6</TD> </TR> <TR> <TD style="">/</TD> <TD style="">除算</TD> <TD style="">2 / 1<BR> 3 / 2<BR> 3.0 / 2.0</TD> <TD style="">2<BR> 1 整数同士の割り算は整数<BR> 1.5</TD> </TR> <TR> <TD style="">%</TD> <TD style="">剰余</TD> <TD style="">2 % 1<BR> 3 % 2</TD> <TD style="">0<BR> 1</TD> </TR> </TBODY> </TABLE> }}}}}} 除算では、整数同士の割り算の計算結果は整数となり、0に丸められます(正の場合は切り捨て、負の場合は切り上げ)。小数の計算結果を求める場合は、浮動小数点同士で計算をします。 *単項演算子 1つのオペランドの前に使用する演算子を単項演算子といいます。 #html2(){{{{{{ <TABLE border="1" cellspacing="0" cellpadding="2"> <TBODY> <TR> <TD style="background-color:#ddeeff;" align="center">演算子</TD> <TD style="background-color:#ddeeff;" align="center">意味</TD> <TD style="background-color:#ddeeff;" align="center">例</TD> <TD style="background-color:#ddeeff;" align="center">答え</TD> </TR> <TR> <TD style="">+</TD> <TD style="">符号はそのまま</TD> <TD style="">+1<BR> +(-1)</TD> <TD style="">1<BR> -1</TD> </TR> <TR> <TD style="">-</TD> <TD style="">符号を反転</TD> <TD style="">-1<BR> -(-1)</TD> <TD style="">-1<BR> 1</TD> </TR> </TBODY> </TABLE> }}}}}} *比較演算子 2つのオペランドを比較する演算子を比較演算子といいます。 #html2(){{{{{{ <TABLE border="1" cellspacing="0" cellpadding="2"> <TBODY> <TR> <TD style="background-color:#ddeeff;" align="center">演算子</TD> <TD style="background-color:#ddeeff;" align="center">意味</TD> <TD style="background-color:#ddeeff;" align="center">例</TD> </TR> <TR> <TD style="">< </TD> <TD style="">より小さい</TD> <TD style="">X < Y</TD> </TR> <TR> <TD style="">></TD> <TD style="">より大きい</TD> <TD style="">X > Y</TD> </TR> <TR> <TD style=""><=</TD> <TD style="">以下</TD> <TD style="">X <= Y</TD> </TR> <TR> <TD style="">>=</TD> <TD style="">以上</TD> <TD style="">X >= Y</TD> </TR> <TR> <TD style="">==</TD> <TD style="">等しい</TD> <TD style="">X == Y</TD> </TR> <TR> <TD style="">!=</TD> <TD style="">等しくない</TD> <TD style="">X != Y</TD> </TR> </TBODY> </TABLE> }}}}}} *論理演算子 論理演算を行い真偽を判定する演算子を論理演算子といいます。 #html2(){{{{{{ <TABLE border="1" cellspacing="0" cellpadding="2"> <TBODY> <TR> <TD style="background-color:#ddeeff;" align="center">演算子</TD> <TD style="background-color:#ddeeff;" align="center">意味</TD> <TD style="background-color:#ddeeff;" align="center">例</TD> <TD style="background-color:#ddeeff;" align="center">答え</TD> </TR> <TR> <TD style="">&&</TD> <TD style="">論理積(AND)</TD> <TD style="">true && true<BR> true && false<BR> false && false</TD> <TD style="">true<BR> false<BR> false</TD> </TR> <TR> <TD style=""><SPAN style="color: black;">|| </SPAN></TD> <TD style="">論理和(OR)</TD> <TD style="">true || true<BR> true || false<BR> false || false</TD> <TD style="">true<BR> true<BR> false</TD> </TR> <TR> <TD style="">!</TD> <TD style="">論理否定(NOT)</TD> <TD style=""> !true<BR> !false</TD> <TD style="">false<BR> true</TD> </TR> </TBODY> </TABLE> }}}}}} && 、|| は左オペランドの評価で結果が得られる場合に右オペランドは評価しません(ショートサーキット)。 *インクリメント演算子、デクリメント演算子 オペランドの値に1加算する演算子をインクリメント演算子、1減算する演算子をデクリメント演算子といいます。 #html2(){{{{{{ <TABLE border="1" cellspacing="0" cellpadding="2"> <TBODY> <TR> <TD style="background-color:#ddeeff;" align="center">演算子</TD> <TD style="background-color:#ddeeff;" align="center">意味</TD> <TD style="background-color:#ddeeff;" align="center">例</TD> <TD style="background-color:#ddeeff;" align="center">答え</TD> </TR> <TR> <TD style="">++</TD> <TD style="">オペランドに1加算される</TD> <TD style="">int a = 0;<BR> cout << ++a;<BR> cout << ++a;<BR> cout << a;<BR> int b = 0;<BR> cout << b++;<BR> cout << b++;<BR> cout << b;</TD> <TD style=""><BR> 1<BR> 2<BR> 2<BR> <BR> 0<BR> 1<BR> 2</TD> </TR> <TR> <TD style="">--</TD> <TD style="">オペランドから1減算される</TD> <TD style="">int a = 0;<BR> cout << --a;<BR> cout << --a;<BR> cout << a;<BR> int b = 0;<BR> cout << b--;<BR> cout << b--;<BR> cout << b;</TD> <TD style=""><BR> -1<BR> -2<BR> -2<BR> <BR> 0<BR> -1<BR> -2</TD> </TR> </TBODY> </TABLE> }}}}}} &color(black){++}演算子をオペランドの手前に書くと、オペランドの値を利用する前に1加算されます。オペランドの後方に書くと、オペランドの値を利用した後に1加算されます。 同様に、--演算子をオペランドの手前に書くと、オペランドの値を利用する前に1減算されます。オペランドの後方に書くと、オペランドの値を利用した後に1減算されます。 *ビット演算子 整数に対してビット単位で演算を行うための演算子をビット演算子といいます。 #html2(){{{{{{ <TABLE border="1" cellspacing="0" cellpadding="2"> <TBODY> <TR> <TD style="background-color:#ddeeff;" align="center">演算子</TD> <TD style="background-color:#ddeeff;" align="center">意味</TD> <TD style="background-color:#ddeeff;" align="center">例</TD> <TD style="background-color:#ddeeff;" align="center">答え</TD> </TR> <TR> <TD style="">&</TD> <TD style="">論理積</TD> <TD style="">12 & 10</TD> <TD style="">8</TD> </TR> <TR> <TD style="">|</TD> <TD style="">論理和</TD> <TD style="">12 | 10</TD> <TD style="">14 </TD> </TR> <TR> <TD style="">^</TD> <TD style="">排他的論理和</TD> <TD style="">12 ^ 10</TD> <TD style="">6 </TD> </TR> <TR> <TD style=""><<</TD> <TD style="">左シフト</TD> <TD style="">15 << 1</TD> <TD style="">30</TD> </TR> <TR> <TD style="">>></TD> <TD style="">右シフト</TD> <TD style="">15 >> 1</TD> <TD style="">7</TD> </TR> </TBODY> </TABLE> }}}}}} *代入演算子 オペランドに値を代入する際用いられる演算子が代入演算子となります。 #html2(){{{{{{ <TABLE border="1" cellspacing="0" cellpadding="2"> <TBODY> <TR> <TD style="background-color:#ddeeff;" align="center">演算子</TD> <TD style="background-color:#ddeeff;" align="center">意味</TD> <TD style="background-color:#ddeeff;" align="center">例</TD> <TD style="background-color:#ddeeff;" align="center">答え</TD> </TR> <TR> <TD style="">=</TD> <TD style="">代入</TD> <TD style="">int a = 1;</TD> <TD style="">1</TD> </TR> <TR> <TD style="">+=</TD> <TD style="">加算代入</TD> <TD style="">int a = 1;<BR> a += 2;</TD> <TD style=""><BR> 3</TD> </TR> <TR> <TD style="">-=</TD> <TD style="">減算代入</TD> <TD style="">int a = 2;<BR> a -= 1;</TD> <TD style=""><BR> 1</TD> </TR> <TR> <TD style="">*=</TD> <TD style="">乗算代入</TD> <TD style="">int a = 2;<BR> a *= 3;</TD> <TD style=""><BR> 6</TD> </TR> <TR> <TD style="">/=</TD> <TD style="">除算代入</TD> <TD style="">int a = 6;<BR> a /= 3;</TD> <TD style=""><BR> 2</TD> </TR> <TR> <TD style="">%=</TD> <TD style="">剰余代入</TD> <TD style="">int a = 3;<BR> a %= 2;</TD> <TD style=""><BR> 1</TD> </TR> <TR> <TD style="">&=</TD> <TD style="">AND代入</TD> <TD style="">bool b = true;<BR> b &= false;</TD> <TD style=""><BR> False</TD> </TR> <TR> <TD style=""><SPAN style="color: black;">|= </SPAN></TD> <TD style="">OR代入</TD> <TD style="">bool b = true;<BR> b <SPAN style="color: black;">|= </SPAN>false;</TD> <TD style=""><BR> true</TD> </TR> <TR> <TD style="">^=</TD> <TD style="">排他的OR代入</TD> <TD style="">bool b = true;<BR> b ^= false;</TD> <TD style=""><BR> True</TD> </TR> <TR> <TD style=""><<=</TD> <TD style="">左シフト代入</TD> <TD style="">int a = 15;<BR> a <<= 1;</TD> <TD style=""><BR> 30</TD> </TR> <TR> <TD style="">>>=</TD> <TD style="">右シフト代入</TD> <TD style="">int a = 15;<BR> a >>= 1;</TD> <TD style=""><BR> 7</TD> </TR> </TBODY> </TABLE> }}}}}} &color(black){+=}演算子の a += 2; は a = a + 2; と同じ意味になります。-=、*=、/=、%=、&=、|=、^=、<<=、>>= も同様です。 *条件演算子 条件の真偽に応じ、結果が変わる演算子を条件演算子と言います。 #html2(){{{{{{ <TABLE border="1" cellspacing="0" cellpadding="2"> <TBODY> <TR> <TD style="background-color:#ddeeff;" align="center">演算子</TD> <TD style="background-color:#ddeeff;" align="center">意味</TD> <TD style="background-color:#ddeeff;" align="center">例</TD> <TD style="background-color:#ddeeff;" align="center">答え</TD> </TR> <TR> <TD style="">?:</TD> <TD style="">三項条件</TD> <TD style="">true ? 1 : 2<BR> false ? 1 : 2</TD> <TD style="">1<BR> 2</TD> </TR> </TBODY> </TABLE> }}}}}} 1番目のオペランドがtrueの場合、2番目のオペランドが結果となります。1番目のオペランドがfalseの場合、3番目のオペランドが結果となります。 *カンマ演算子 複数行にわたるプログラム行を一行で表現する際使用する演算子がカンマ演算子です。 #html2(){{{{{{ <TABLE border="1" cellspacing="0" cellpadding="2"> <TBODY> <TR> <TD style="background-color:#ddeeff;" align="center">演算子</TD> <TD style="background-color:#ddeeff;" align="center">意味</TD> <TD style="background-color:#ddeeff;" align="center">例</TD> </TR> <TR> <TD style="">,</TD> <TD style="">カンマ演算子</TD> <TD style="">int a = 1;<BR> int b = 2;<BR> ↓<BR> int a = 1,b =2;</TD> </TR> </TBODY> </TABLE> }}}}}} 変数の宣言、for文、if文で使用されます。 *sizeof演算子 型や変数のメモリサイズを調べる際使用する演算子がsizeof演算子です。 #html2(){{{{{{ <TABLE border="1" cellspacing="0" cellpadding="2"> <TBODY> <TR> <TD style="background-color:#ddeeff;" align="center">演算子</TD> <TD style="background-color:#ddeeff;" align="center">意味</TD> <TD style="background-color:#ddeeff;" align="center">例</TD> <TD style="background-color:#ddeeff;" align="center">答え</TD> </TR> <TR> <TD style="">sizeof</TD> <TD style="">sizeof演算子</TD> <TD style="">sizeof(int);<BR> sizeof(double);<BR> int a;<BR> sizeof a;<BR>sizeof(a);</TD> <TD style="">4<BR> 8<BR> <BR> 4<BR> 4</TD> </TR> </TBODY> </TABLE> }}}}}} sizeof([[データ型]])、sizeof 変数名, sizeof(変数名)の形で使用されます。 *ポインタ演算子、アドレス演算子 ポインタの宣言や、アドレスに格納された値を表す際に使用する演算子がポインタ演算子*です。 変数のアドレスを表す際に使用する演算子がアドレス演算子&です。 #html2(){{{{{{ <TABLE border="1" cellspacing="0" cellpadding="2"> <TBODY> <TR> <TD style="background-color:#ddeeff;" align="center">演算子</TD> <TD style="background-color:#ddeeff;" align="center">意味</TD> <TD style="background-color:#ddeeff;" align="center">例</TD> </TR> <TR> <TD style="">*</TD> <TD style=""><BR> ポインタ演算子<BR> <BR> </TD> <TD style="" rowspan="2">//ポインタの宣言<BR> int *pa; <BR> //アドレスの代入<BR> int a = 1;<BR> pa = &a;<BR> //値の代入<BR> *pa = 2;</TD> </TR> <TR> <TD style="">&</TD> <TD style=""><BR> アドレス演算子<BR> <BR> </TD> </TR> </TBODY> </TABLE> }}}}}} #html2(){{{{{{ <TABLE border="1" cellspacing="0" cellpadding="2"> <TBODY> <TR> <TD style="background-color:#ddeeff;" align="center">種類</TD> <TD style="background-color:#ddeeff;" align="center">宣言</TD> <TD style="background-color:#ddeeff;" align="center">値</TD> <TD style="background-color:#ddeeff;" align="center">アドレス </TD> </TR> <TR> <TD style="">変数</TD> <TD style="">int a;</TD> <TD style="">a</TD> <TD style="">&a </TD> </TR> <TR> <TD style="">ポインタ</TD> <TD style="">int *pa;</TD> <TD style="">*pa</TD> <TD style="">pa</TD> </TR> </TBODY> </TABLE> }}}}}} *メンバ演算子 構造体、共用体、クラスのメンバへアクセスする際使用する演算子がメンバ演算子です。 #html2(){{{{{{ <TABLE border="1" cellspacing="0" cellpadding="2"> <TBODY> <TR> <TD style="background-color:#ddeeff;" align="center">演算子</TD> <TD style="background-color:#ddeeff;" align="center">意味</TD> <TD style="background-color:#ddeeff;" align="center">例</TD> </TR> <TR> <TD style="">.</TD> <TD style="">メンバへ直接アクセス</TD> <TD style="">struct book{<BR> int id;<BR> };<BR> book bk;<BR> bk.id = 1;</TD> </TR> <TR> <TD style="">-></TD> <TD style=""> メンバへポインタを介しアクセス</TD> <TD style="">struct book{<BR> int id;<BR> };<BR> book *pbk;<BR> pbk->id = 1;</TD> </TR> </TBODY> </TABLE> }}}}}} *new演算子、delete演算子 メモリ領域の動的確保に使用される演算子がnew演算子です。 動的確保されたメモリ領域を解放する演算子がdelete演算子です。 #html2(){{{{{{ <TABLE border="1" cellspacing="0" cellpadding="2"> <TBODY> <TR> <TD style="background-color:#ddeeff;" align="center">演算子</TD> <TD style="background-color:#ddeeff;" align="center">意味</TD> <TD style="background-color:#ddeeff;" align="center">例</TD> </TR> <TR> <TD style="">new</TD> <TD style="">メモリ領域の動的確保</TD> <TD style="" rowspan="2">int *pn;<BR> pn = new int;<BR> delete pn;</TD> </TR> <TR> <TD style="">delete</TD> <TD style="">メモリ領域の解放</TD> </TR> </TBODY> </TABLE> }}}}}}