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 A | Bit B | A XOR B |
|---|---|---|
| false | false | false |
| false | true | true |
| true | false | true |
| true | true | false |
การดำเนินการบิตวایزอื่นๆ ของ 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[])