C# でブール変数を切り替えます

Bilal Shahid 2023年10月12日
  1. C# でブール変数を切り替えます
  2. C#! 演算子を使用してブール変数をトグルする
  3. C# のブール変数を切り替えるために^(XOR)演算子を使用すべきでない理由
C# でブール変数を切り替えます

この記事では、C# でブール変数を切り替える方法について説明します。

C# でブール変数を切り替えます

ブール変数を切り替えるとは、その値を truefalse の間で変更することを意味します。これを行う簡単な方法の 1つは、次のコードを使用することです。このコードは、関数にすることもできます。

bool flag = false;
if (flag == false) {
  flag = true;
} else {
  flag = false;
}

関数を作成する場合は、次のようにすることができます。

using System;

class Program
{
   static void toggle(ref bool flag)
   {
       if (flag == false)
       {
           flag = true;
       }
       else
       {
           flag = false;
       }
   }

   static void Main(String[] args)
   {
       bool flag = false;
       toggle(ref flag);
       Console.WriteLine(flag);
   }
}

ref キーワードを使用して、flag パラメーターが参照によって渡されるようにしているため、関数内で変更されます。

出力は次のようになります。

True

次に、これらの長いコード行を省略して、はるかに短い行に切り替える方法を見てみましょう。

C#! 演算子を使用してブール変数をトグルする

このトグルを簡単な構文で行う方法の 1つは、値をその反対に変換する ! 演算子を使用することです。

したがって、次のように書くことができます。

flag = !flag;

flagtrue の場合、False になります。false の場合、True になります。

出力は同じになります:

True

完全なコードは以下に文書化されています:

using System;

class Program
{
   static void Main(string[] args)
   {
       bool flag = false;
       flag = !flag;
       Console.WriteLine(flag);
   }
}

C# のブール変数を切り替えるために^(XOR)演算子を使用すべきでない理由

XOR 演算子は、bool 変数の値が true から false の場合にのみ変換する傾向があります。ただし、値がすでに false である反対の場合には機能しません。

以下の例を見てみましょう。

using System;

class Program
{
   static void Main(string[] args)
   {
       bool flag = true;
       flag ^= flag;
       Console.WriteLine(flag);
   }
}

上記を実行すると、出力は次のようになります。

False

ただし、flagfalse に設定されている場合、XOR を設定しても True には変更されません。

using System;

class Program
{
   static void Main(string[] args)
   {
       bool flag = false;
       flag ^= flag;
       Console.WriteLine(flag);
   }
}

出力は次のようになります。

False

なんで?ええと、1true であり、0false です。flagtrue である XOR を置くと、結果は 0 または false になります。

しかし、flagfalse である XOR を配置した場合でも、結果は 0 のままになります。XOR テーブルを覚えているなら、それがどのように機能するかです。

XOR テーブル

著者: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub

関連記事 - Csharp Boolean