スポンサーリンク
※サイト運営にサーバーは必須です※
~このサイトもエックスサーバーを使用しています~
目次
論理演算子とは?
論理演算子とは、真偽(論理)値を扱う演算子です。
論理演算子の判定結果は、true(真)かfalse(偽)を返します。
論理演算子には以下のような種類があります。
演算子 | 項数 | 意味 |
! | 1 | 否定(NOT) |
& | 2 | かつ(AND) |
&& | 2 | かつ(AND) |
| | 2 | または(OR) |
|| | 2 | または(OR) |
^ | 2 | 排他的論理和(XOR) |
NOT(否定演算子「!」)
Aがtrueなら!Aはfalseを返します。
A | !A |
true | false |
false | true |
AND(「&」「&&」)
難しい言葉で言えば、2つの式の論理積(AND)を求めます。
両方の式がtrueであれば、trueを返します。
そうでない場合は、falseを返します。
A | B | A&B |
true | true | true |
true | false | false |
false | true | false |
false | false | false |
※上のパターンで言えば、AとBの両方がtrueでないと、「A&B」はtrueにならない。
OR(「|」「||」)
難しい言葉で言えば、2つの式の論理和(OR)を求めます。
両方の式のどちらかがtrueであれば、trueを返します。
両方ともfalseの場合に、falseを返します。
A | B | A|B |
true | true | true |
true | false | true |
false | true | true |
false | false | false |
※上のパターンで言えば、AとBのどちらかがtrueであれば、「A|B」はtrueになります。
XOR(「^」)
難しい言葉で言えば、2つの式の排他的論理和(XOR)を求めます。
2つの式が同じであれば、falseを返し、2つの式が異なれば、trueを返します。
A | B | A^B |
true | true | false |
true | false | true |
false | true | true |
false | false | false |
演算子の優先順位
演算子の優先順位は
「!」(NOT)>「&」(AND)>「^」(XOR)>「|」(OR)
左側の演算子が優先されます。
最低限、ANDはORより優先されると覚えておきましょう。
※単項演算子と2項演算子を比較すると、単項演算子が優先されています。また、二項演算子同士を比べた際、trueを返すパターンが少ない演算子の方が、先に演算されると覚えておきましょう。ANDは1パターン、XORは2パターン、ORは3パターン、trueを返すパターンがあります。
以下が演算子の優先順位を比較する用のソースコード。
言語はC#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace operator10 { class Program { static void Main(string[] args) { bool t = true; bool f = false; bool a = !f & f; bool a1 = (!f) & f;//こっちが正しい bool a2 = !(f & f); Console.WriteLine("!f & f"); Console.WriteLine(a); Console.WriteLine(a1); Console.WriteLine(a2); bool aa = f & (!f);//順序に関係ないか確認 Console.WriteLine(aa); Console.WriteLine();//改行 bool b = f & f | t; bool b1 = (f & f) | t;//こっちが正しい bool b2 = f & (f | t); Console.WriteLine("f & f | t"); Console.WriteLine(b); Console.WriteLine(b1); Console.WriteLine(b2); Console.WriteLine();//改行 // 順序に関係ないか確認 bool bb = t | f & f; bool bb1 = t | (f & f);//こっちが正しい bool bb2 = (t | f) & f; Console.WriteLine(" t | f & f"); Console.WriteLine(bb); Console.WriteLine(bb1); Console.WriteLine(bb2); Console.WriteLine();//改行 //うまくいかないパターンを探索(8通り) bool[] d = new[] { f, f, f, f, t, t, t, t }; bool[] d0 = new[] { f, f, t, t, f, f, t, t }; bool[] d1 = new[] { f, t, f, t, f, t, f, t }; for (int i = 0; i < 8; i++) { bool c = d[i] | d0[i] ^ d1[i]; bool c1 = (d[i] | d0[i]) ^ d1[i]; bool c2 = d[i] | (d0[i] ^ d1[i]); Console.WriteLine("" + c + c1 + c2); } Console.WriteLine();//改行 //発見したパターンを取り出す bool e = t | t ^ t; bool e1 = t | (t ^ t);//こっちが正しい bool e2 = (t | t) ^ t; Console.WriteLine(" t | t ^ t"); Console.WriteLine(e); Console.WriteLine(e1); Console.WriteLine(e2); bool ee = t ^ t | t; Console.WriteLine(ee);//順序に関係ないか確認 Console.WriteLine();//改行 //うまくいかないパターンを探索 for (int i = 0; i < 8; i++) { bool c = d[i] & d0[i] ^ d1[i]; bool c1 = (d[i] & d0[i]) ^ d1[i]; bool c2 = d[i] & (d0[i] ^ d1[i]); Console.WriteLine("" + c + c1 + c2); } Console.WriteLine();//改行 bool g = f & t ^ t; bool g1 = (f & t) ^ t;//こっちが正しい bool g2 = f & (t ^ t); Console.WriteLine(" f & t ^ t"); Console.WriteLine(g); Console.WriteLine(g1); Console.WriteLine(g2); bool gg = t ^ t & f; Console.WriteLine(gg);//順序に関係ないか確認 } } } |
実行結果
!f & f
False
False
True
False
f & f | t
True
True
False
t | f & f
True
True
False
FalseFalseFalse
TrueTrueTrue
TrueTrueTrue
FalseFalseFalse
TrueTrueTrue
TrueFalseTrue
TrueTrueTrue
t | t ^ t
True
True
False
True
FalseFalseFalse
TrueTrueFalse
FalseFalseFalse
TrueTrueFalse
FalseFalseFalse
TrueTrueTrue
TrueTrueTrue
FalseFalseFalse
f & t ^ t
True
True
False
True
関連記事
~Webサイトを自分で作ってみませんか?~
Webサイトを運営するにはサーバーが必須です。
このサイトは、エックスサーバー のサーバーを使用しています。
エックスサーバーは無料で10日間お試しができます。