Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

การดำเนินการ XOR แบบบิตวایزระหว่าง BitArray ใน C#

BitArray ใน C# รองรับการดำเนินการบิตวایز (bitwise operations) รวมถึง Xor() (exclusive OR) ซึ่งเปรียบเทียบบิตแต่ละตำแหน่งของสอง BitArray คืนค่า true ก็ต่อเมื่อบิตต่างกัน (true/false หรือ false/true) และ false ก็ต่อเมื่อบิตเหมือนกัน

ตัวอย่างโค้ดที่ 1

using System;
using System.Collections;

public class Demo
{
    public static void Main()
    {
        BitArray arr1 = new BitArray(5);
        BitArray arr2 = new BitArray(5);

        arr1[0] = false;
        arr1[1] = false;
        arr2[0] = false;
        arr2[1] = true;

        Console.WriteLine("BitArray1 elements...");
        foreach (bool res in arr1)
        {
            Console.WriteLine(res);
        }

        Console.WriteLine("\nBitArray2 elements...");
        foreach (bool res in arr2)
        {
            Console.WriteLine(res);
        }

        Console.WriteLine("\nBitwise exclusive OR operation...");
        IEnumerable demoEnum = arr1.Xor(arr2);
        foreach (object ob in demoEnum)
        {
            Console.WriteLine(ob);
        }
    }
}

ผลลัพธ์

BitArray1 elements...
False
False
False
False
False
BitArray2 elements...
False
True
False
False
False
Bitwise exclusive OR operation...
False
True
False
False
False

ตัวอย่างโค้ดที่ 2: ค่าซับซ้อนกว่า

using System;
using System.Collections;

public class Demo
{
    public static void Main()
    {
        BitArray arr1 = new BitArray(5);
        BitArray arr2 = new BitArray(5);

        arr1[0] = false;
        arr1[1] = false;
        arr1[2] = false;
        arr1[3] = true;
        arr1[4] = false;

        arr2[0] = false;
        arr2[1] = true;
        arr2[2] = false;
        arr2[3] = true;
        arr2[4] = true;

        Console.WriteLine("BitArray1 elements...");
        foreach (bool res in arr1)
        {
            Console.WriteLine(res);
        }

        Console.WriteLine("\nBitArray2 elements...");
        foreach (bool res in arr2)
        {
            Console.WriteLine(res);
        }

        Console.WriteLine("\nBitwise exclusive OR operation...");
        IEnumerable demoEnum = arr1.Xor(arr2);
        foreach (object ob in demoEnum)
        {
            Console.WriteLine(ob);
        }
    }
}

ผลลัพธ์

BitArray1 elements...
False
False
False
True
False
BitArray2 elements...
False
True
False
True
True
Bitwise exclusive OR operation...
False
True
False
False
True

ตารางความจริงของ XOR

Bit ABit BA XOR B
falsefalsefalse
falsetruetrue
truefalsetrue
truetruefalse

การดำเนินการบิตวایزอื่นๆ ของ BitArray

  • And(BitArray) - AND แบบบิตวایز (true ก็ต่อเมื่อทั้งคู่ true)
  • Or(BitArray) - OR แบบบิตวایز (true ก็ต่อเมื่ออย่างน้อยหนึ่งตัว true)
  • Xor(BitArray) - XOR แบบบิตวایز (true ก็ต่อเมื่อต่างกัน)
  • Not() - NOT แบบบิตวایز (กลับค่าทุกบิต)

ข้อสังเกต

  • เมธอดเหล่านี้ แก้ไข BitArray ต้นทาง (mutates the current instance) และคืนค่า this
  • ทั้งสอง BitArray ต้องมี ความยาวเท่ากัน มิฉะนั้นจะโยน ArgumentException
  • คืนค่า IEnumerable ที่สามารถวนลูปได้ทันที
  • BitArray ใช้หน่วยความביעילותสูง - 1 บิตต่อค่า (แทนที่จะเป็น 1 ไบต์ของ bool[])