演算子表
第2版の流用ですが、気にせずに(^_^;)
使っていたら覚えます。丸暗記はしなくていいと思います。
演算子 | 演算方法 | 役割・注意事項 | 使用例や解説(ここで出てくるアルファベットは特に断りが無い限り、それぞれint型の変数とします。) | |||||||||||||||
= | 代入演算 二項演算 |
右辺にある値を左辺に代入します。 数学で使用する=とは意味が違うので注意して下さい。 (右の※の式を見て下さい。) 左辺には変数を持ってきましょう。 |
x = 2; x = 2 + 3; //xに5を代入します。 ※ x = x + 2; //xの元々の値に2を足した値をxに代入します。 |
|||||||||||||||
+ | 算術演算 二項演算 |
+記号の左右の値を足します。 | x = 2 + 3; | |||||||||||||||
- | 算術演算 単項演算 |
値の符号を逆にします。 | x = -2; | |||||||||||||||
- | 算術演算 二項演算 |
-記号の左の項から右の項を引きます。 | x = 5 - 2; | |||||||||||||||
* | 算術演算 二項演算 |
*記号の左右の値を掛けます。 | x = 5 * 2; | |||||||||||||||
/ | 算術演算 二項演算 |
/記号の左の項を右の項で割ります。 また、ZDOOMで扱う値は整数なので、結果の値が小数の場合でも、切り捨てをした整数の値が計算の結果になります。 ちなみに、0でわるとエラーが発生します。 |
x = 4 / 2; x = 3 / 2; //結果は1.5を切り捨てた値の1です。 |
|||||||||||||||
% | 算術演算 二項演算 |
%記号の左の項を右の項で割ったときのあまりを計算します。 ちなみに、0でわるとエラーが発生します。 |
x = 12 % 5; //結果は2になります。 |
|||||||||||||||
& | ビット演算 二項演算 |
ビット演算の演算子です。AND式(ビット論理積)を行います。 両方のbitが1であるときは1を返し、それ以外の場合は、0を返します。 書き方: x = a & b; など |
a、bは1bitの情報量(0か1)の変数とします。
また、 x = 14 & 7; のとき 14は2進数で 1110 7は2進数で 0111 よって各位でAND式をかけると 14 & 7 = 0110 (右辺は2進数) となり、0110(2進数) = 6(10進数)となるので、 xの値は6となります。 (ZDOOMで扱う整数はは32bitですが、今回は残り28bit部分は何も影響しないので省いています) |
|||||||||||||||
| | ビット演算 二項演算 |
ビット演算の演算子です。OR式(ビット論理和)を行います。 両方のbitのうち少なくとも片方が1であるときは1を返し、それ以外の場合は0を返します。 書き方: x = a | b; など |
a、bは1bitの情報量(0か1)の変数とします。
また、 x = 12 | 5; のとき 12は2進数で 1100 5は2進数で 0101 よって各位でOR式をかけると 12 | 5 = 1101 (右辺は2進数) となり、1101(2進数) = 13(10進数)となるので、 xの値は13となります。 (ZDOOMで扱う整数はは32bitですが、今回は残り28bit部分は何も影響しないので省いています) |
|||||||||||||||
^ | ビット演算 二項演算 |
ビット演算の演算子です。XOR式(ExclusiveOR、ビット排他的論理和)を行います。 両方のbitのうちどちらか片方が1であるときは1を返し、それ以外の場合(どちらとも1または0のとき)は0を返します。 書き方: x = a ^ b; など |
a、bは1bitの情報量(0か1)の変数とします。
また、 x = 9 ^ 10; のとき 9は2進数で 1001 10は2進数で 1010 よって各位でXOR式をかけると 9 ^ 10 = 0011 (右辺は2進数) となり、0011(2進数) = 3(10進数)となるので、 xの値は3となります。 (ZDOOMで扱う整数はは32bitですが、今回は残り28bit部分は何も影響しないので省いています) |
|||||||||||||||
~ | ビット演算 単項演算 |
ビット演算の演算子です。NOT式(ビット否定)を行います。 整数を2進数に戻し、各bitでNOT式をかけます。 ある位が0のときは1にし、1のときは逆に0にします。 書き方: x = ~a; など |
x =
~5; のとき ZDOOMでは整数を32bitの情報量で表すので 5は2進数で 00000000000000000000000000000101 各位について0と1を逆にするので ~5は2進数で 11111111111111111111111111111010 となります。 これを10進数で表すと -6となります。 よって xの値は-6になります。 |
|||||||||||||||
<< | ビット演算 二項演算 |
ビット演算の演算子です。<<記号の左の項を2進数に直して、<<記号の右の項の値の分だけ左の項の値を左へ移動させます。 書き方: x = a << 2; など |
今回は整数が4ビットの情報量しかないとします。 x = 2 << 1; のとき 2は2進数で 0010 これを左へ1個分移動させるので 2 << 1は2進数で 0100 となります。 これを10進数で表すと 4となります。 よって xの値は4になります。 また、 x = -7 << 1; のとき、 -7は2進数で 1001 となります。 これを左へ1シフトすると -7 << 1は2進数で 0010 となり、 xは2になります。 つまり、変数の一番左のビット部分の値が何であれ情報は消えてしまい、右から新しくやってくるビット部分は0になります。 ちなみに、 a << b は a * 2^b と同じ意味になります。(ただし、aの一番左のビット部分が0で、そこに何も影響が無い場合に限ります。) |
|||||||||||||||
>> | ビット演算 二項演算 |
ビット演算の演算子です。>>記号の左の項を2進数に直して、>>記号の右の項の値の分だけ左の項の値を右へ移動させます。 書き方: x = a >> 3; など |
今回は整数が4ビットの情報量しかないとします。 x = 2 >> 1; のとき 2は2進数で 0010 これを右へ1個分移動させるので 2 >> 1は2進数で 0001 となります。 これを10進数で表すと 1となります。 よって xの値は1になります。 また、 x = 1 >> 1; のとき、 1は2進数で 0001 となります。 これを右へ1シフトすると 1 >> 1は2進数で 0000 となり、 xは0になります。 つまり、変数の一番右のビット部分の値が何であれ情報は消えてしまい、左から新しくやってくるビット部分は0になります。 ちなみに、 a >> b は a / 2^b(小数点以下切り捨て) と同じ意味になります。(ただし、aの一番左のビット部分が0の場合に限ります。) |
|||||||||||||||
== | 関係演算 二項演算 |
==記号の左右の値が同じ場合、1(TRUE)を返します。 ==記号の左右の値が違う場合、0(FALSE)を返します。 書き方: bool x = a == b; など |
bool a = 3 == 3; //この場合、値が等しいので、変数aには1が代入されます。 他にも if(health == 100){ //内容 } など、条件として使用することもできます。 |
|||||||||||||||
!= | 関係演算 二項演算 |
!=記号の左右の値が違う場合、1(TRUE)を返します。 !=記号の左右の値が同じ場合、0(FALSE)を返します。 書き方: bool x = a != b; など |
bool a = 3 != 3; //この場合、値が等しいので、変数aには0が代入されます。 他にも if(monsters != 0){ //内容 } など、条件として使用することもできます。 |
|||||||||||||||
> | 関係演算 二項演算 |
a >
b のとき、aがbより大きければ1(TRUE)を返します。 aがbより小さいまたは等しければ0(FALSE)を返します。 書き方: bool x = a > b; など |
bool a = 4 >
3; //この場合、4は3より大きいので、変数aには1が代入されます。 他にも while(monsters > 0){ //内容 } など、条件として使用することもできます。 |
|||||||||||||||
>= | 関係演算 二項演算 |
a >=
b のとき、aがbより大きいまたは等しければ1(TRUE)を返します。 aがbより小さければ0(FALSE)を返します。 書き方: bool x = a >= b; など |
bool a = 3 >=
5; //この場合、3は5より小さいので、変数aには0が代入されます。 他にも if(ammo >= 50){ //内容 } など、条件として使用することもできます。 |
|||||||||||||||
< | 関係演算 二項演算 |
a <
b のとき、aがbより小さければ1(TRUE)を返します。 aがbより大きいまたは等しければ0(FALSE)を返します。 書き方: bool x = a < b; など |
bool a = 4 < 3; //この場合、4は3より大きいので、変数aには0が代入されます。 他にも while(x < 10){ //内容 } など、条件として使用することもできます。 |
|||||||||||||||
<= | 関係演算 二項演算 |
a <=
b のとき、aがbより小さいまたは等しければ1(TRUE)を返します。 aがbより大きければ0(FALSE)を返します。 書き方: bool x = a <= b; など |
bool a = 5 >= 5; //この場合、値が等しいので、変数aには0が代入されます。 他にも if(armor <= 50){ //内容 } など、条件として使用することもできます。 |
|||||||||||||||
&& | 論理演算 二項演算 |
論理演算の演算子です。AND式(論理積)を行います。 両方の事柄が真(TRUE)ならば1を、それ以外の場合は0を返します。 また、"事柄"に、演算子を使った式を持ってくることができ、そのときはそちらの計算が優先されます。 日本語で言うと、"かつ"を意味しています。 書き方: bool x = a == 1 && b != 1; //aが1かつbが1でないなら1を返します。 など |
の場合は 3→真 0→偽 なので0となります。 また、 a == 1&& b != 1&& c == 5 などと複数つなげても使用できます。 条件を指定するときなどに便利です。 |
|||||||||||||||
|| | 論理演算 二項演算 |
論理演算の演算子です。OR式(論理和)を行います。 両方の事柄のうち、どちらか少なくとも1つが真(TRUE)ならば1を、それ以外の場合は0を返します。 また、"事柄"に、演算子を使った式を持ってくることができ、そのときはそちらの計算が優先されます。 日本語で言うと、"または"を意味しています。 書き方: bool x = a == 1 || b != 1; //aが1またはbが1でないなら1を返します。 など |
の場合は 3→真 0→偽 なので1となります。 また、 a == 1|| b != 1|| c == 5 などと複数つなげても使用できます。 条件を指定するときなどに便利です。 |
|||||||||||||||
! | 論理演算 単項演算 |
論理演算の演算子です。NOT式(否定)を行います。 !記号の右にある事柄が真(TRUE)なら0を、偽(FALSE)なら1を返します。 また、"事柄"に、演算子を使った式を持ってくることができ、そのときはそちらの計算が優先されます。 書き方: bool = !(a == 1); など |
!!3 とすると、 !3 で0になるので !!3 は、 !0 となり、結果は 1 となります。 |
|||||||||||||||
+= | 算術代入演算 二項演算 |
x += 2; とすると、 x = x + 2; と等しいです。 |
x += 2; //xの元の値に2を足した値をxに代入します。 |
|||||||||||||||
-= | 算術代入演算 二項演算 |
x -= 2; とすると、 x = x - 2; と等しいです。 |
x -= 2; //xの元の値から2を引いた値をxに代入します。 |
|||||||||||||||
*= | 算術代入演算 二項演算 |
x *= 2; とすると、 x = x * 2; と等しいです。 |
x *= 2; //xの元の値に2を掛けた値をxに代入します。 |
|||||||||||||||
/= | 算術代入演算 二項演算 |
x /= 2; とすると、 x = x / 2; と等しいです。 |
x /= 2; //xの元の値を2で割った値をxに代入します。 |
|||||||||||||||
%= | 算術代入演算 二項演算 |
x %= 2; とすると、 x = x % 2; と等しいです。 |
x %= 2; //xの元の値を2で割ったときのあまりをxに代入します。 |
|||||||||||||||
&= | ビット代入演算 二項演算 |
x &= y; とすると、 x = x & y; と等しいです。 |
x &= 5; //xの元の値と5でビット論理積を行って結果の値をxに代入します。 |
|||||||||||||||
|= | ビット代入演算 二項演算 |
x |= y; とすると、 x = x | y; と等しいです。 |
x |= 5; //xの元の値と5でビット論理和を行って結果の値をxに代入します。 |
|||||||||||||||
^= | ビット代入演算 二項演算 |
x ^= y; とすると、 x = x ^ y; と等しいです。 |
x ^= 5; //xの元の値と5でビット排他的論理和を行って結果の値をxに代入します。 |
|||||||||||||||
<<= | ビット代入演算 二項演算 |
x <<= y; とすると、 x = x << y; と等しいです。 |
x <<= 5; //xの元の値を左へ5シフトした値をxに代入します。 |
|||||||||||||||
>>= | ビット代入演算 二項演算 |
x >>= y; とすると、 x = x >> y; と等しいです。 |
x >>= 5; //xの元の値を右へ5シフトした値をxに代入します。 |
|||||||||||||||
++ | インクリメント 単項演算 |
b = a++; のとき、 aをbに代入してからaに1を足します。 b = ++a; のとき、 aに1を足してからaをbに代入します。 |
a = 1のとき、 b = a++; とすると、bは1に、 b = ++a; とするとbは2になります。 (どちらも最終的にaは2になります。) また、 a++; だけでも使用できます。 このときは、aの値が1増えるだけです。 |
|||||||||||||||
-- | デクリメント 単項演算 |
b = a--; のとき、 aをbに代入してからaから1を引きます。 b = --a; のとき、 aから1を引いてからaをbに代入します。 |
a = 1のとき、 b = a--; とすると、bは1に、 b = --a; とするとbは0になります。 (どちらも最終的にaは0になります。) また、 a--; だけでも使用できます。 このときは、aの値が1減るだけです。 |
※注意:ZDOOMには、指数の演算子がありません。
※注意:演算をするときに、()を使用することができます。()の中にまた()入るような式になっても問題はありません。
演算子の優先順位
日常生活で使う演算子にも優先順位ってありますよね。
例えば
3 + 2 * 5
とかです。
この場合、*記号の方が+記号よりも演算が優先されますよね。
ACSでも演算子の優先順位があります。
覚えていたら便利な物を少しだけ紹介しておきます。
・四則演算
これは日常生活と同じです。
*,/,%
演算子が
+,-
演算子より優先されます。
・論理演算子
x == 5 && y == 3
といった場合には、論理演算子が後回しになります。
・関係演算子
4 * 2 >= 4 + 2
といった場合には、関係演算子が後回しになります。
※優先順位が同じ演算子については、「左結合」とか「右結合」とかいって、さらに優先順位がありますが、覚えなくてもあまり差し支えはないと思います。
※演算子の優先順位に困ったら、「()」括弧を使いましょう。これはどんな演算子よりも優先されるので、確実に演算の順番を指定できます。