演算子表


第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)の変数とします。
a b a & b
0 0 0
0 1 0
1 0 0
1 1 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)の変数とします。
a b a | b
0 0 0
0 1 1
1 0 1
1 1 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)の変数とします。
a b a ^ b
0 0 0
0 1 1
1 0 1
1 1 0

また、
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を返します。
など
a b a && b
3 && 0
の場合は
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を返します。
など
a b a || b
3 || 0
の場合は
3→真
0→偽
なので1となります。
また、
a == 1|| b != 1|| c == 5
などと複数つなげても使用できます。
条件を指定するときなどに便利です。
! 論理演算
単項演算
論理演算の演算子です。NOT式(否定)を行います。

!記号の右にある事柄が真(TRUE)なら0を、偽(FALSE)なら1を返します。
また、"事柄"に、演算子を使った式を持ってくることができ、そのときはそちらの計算が優先されます。

書き方:

bool = !(a == 1);
など
a !a
ちなみに、
!!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
といった場合には、関係演算子が後回しになります。

※優先順位が同じ演算子については、「左結合」とか「右結合」とかいって、さらに優先順位がありますが、覚えなくてもあまり差し支えはないと思います。
※演算子の優先順位に困ったら、「()」括弧を使いましょう。これはどんな演算子よりも優先されるので、確実に演算の順番を指定できます。


Back(その6へ) Back(ACSへ) Home