こんばにちは、ユウです。
今回は論理演算子と補数について解説していきたいと思います。
補数はプログラミングを始めていくうえで大切な考え方ですのでしっかりと覚えておくようにしましょう。
本記事の内容
☑論理演算子の使い方について
☑補数とは
論理演算子
論理演算子(logical operator)は、論理和(AまたはB)や論理積(AかつB)を表現します。
論理演算子には論理関係演算子(logical relational operator)、ビット論理演算子(bitwise logical operator)、否定演算子(negation operator)の3種類があります。
論理関係演算子
論理関係演算子には&&と||という記号があります。
これらの意味はそれぞれ&&は「かつ」、||は「または」というように覚えるようにすると、良いかもです。
ちなみに、オペランドはすべてbool型でなくてはいけませんので、演算結果もbool型(真偽)となります。
□A&&B A,Bともに真の時は真、それ以外は偽
□A||B A,Bともに偽の時は真、それ以外は偽
否定演算子
否定演算子は ! で表します。
□!A Aが真の時は偽、Aが偽の時は真
ビット論理演算子
ビット論理演算子には、&,|,^,~の4つが存在します。
「A op B」(op は&,|,^のいずれか)の演算において、A,Bが整数型の時は、各ビットについての論理演算が行われます。
□& 対応するビットが1と1の時は1、それ以外は0
□| 対応するビットが0と0の時は0、それ以外は1
□^ 対応するビットが0と1、1と0のように異なれば1、それ以外は0
ビット論理演算子はオペランドにbool型をとることができます。
□A&B A,Bともに真の時は真、それ以外は偽
□A|B A,Bともに偽の時は偽、それ以外は真
□A^B AとBが異なれば真、それ以外は偽
これらから、A&&BもA&Bも同じではないかという疑問が上がります。
確かにこれらは見た目は等しいですが、途中経過が異なっています。
「A && B」については、Aが偽ならばBが真だろうが偽であろうが式の値は偽となります。
そこではAが偽の時にはBの評価が行われていません。これを短絡評価といいます。
これと比較して「A & B」については、Aが偽であってもBが評価されます。
「A || B」については、Aが真であれば、Bはなんであれ式の値は真となります。
そこでは先らと同様にAが真ならBの評価は行われません。
「A | B」では両方のオペランドの評価が行われます。
それでは実際にプログラムで確認していきましょう。
ビット論理演算子の最後は「^」です。
これは、int、uint、long、ulongに対してビットごとの補数演算を行います。
補数演算子の使い方をプログラムで確認してみましょう。
補数について
補数とは、コンピュータでマイナスの計算をするために考えられたものです。
わかりやすくするために8ビットの整数で考えます。
正負は先頭ビットで表現します。先頭ビットが0の時は正、1の時は負で表現できます。
最小値 00000001 (1)
最大値 01111111 (127)
ビットを反転させたものをマイナスと考えると、-1から-127までを表現することができます。これを1の補数といいます。
・・・
00000011 (3)
00000010 (2)
00000001 (1)
00000000 (0)
11111111 (0)
11111110 (-1)
11111101 (-2)
11111100 (-3)
・・・
1の補数はわかりやすい半面、0が2つ出来てしまうというデメリットが存在します。
そのため、ほとんどの場合使われることがありません。
そこで、マイナス側についてはまず1の補数で表現し、これに1を加えたものを補数としたほうが合理的です。これを2の補数といいます。
これに従うと先ほどの数は以下のようになります。
・・・
00000011 (3)
00000010 (2)
00000001 (1)
00000000 (0)
11111111 (-1)
11111110 (-2)
11111101 (-3)
・・・
補数はプログラミングを始めたての人がつまずくところだと思いますが、これは身に着けておかないといけないので必ず覚えておくようにしておきましょう。
最後に
今回は論理演算子と補数について解説してきました。
これらはこれからやっていく内容で使うことがあるので、必ず覚えるようにしましょう。
ゲーム制作においても多用していくので、理解を深めるようにしておいて下さい。
今回はこれで以上となります。
最後まで読んでいただきありがとうございました!