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

คลาส BitArray ใน C# - คู่มือครบถ้วน

ภาพรวม

BitArray ใน namespace System.Collections จัดการอาร์เรย์บิตแบบกะทัดรัด โดยแต่ละบิตแสดงเป็นค่า Boolean (true = 1, false = 0) เหมาะสำหรับการจัดการแฟล็กจำนวนมาก bitmap หรือชุดค่าบูลีน

เมธอดหลักของ BitArray

ลำดับเมธอดและคำอธิบาย
1public BitArray And(BitArray value); - ดำเนินการ AND แบบบิตกับ BitArray อีกตัวหนึ่ง คืนค่า BitArray ใหม่
2public bool Get(int index); - ดึงค่าบิตที่ตำแหน่งที่ระบุ
3public BitArray Not(); - กลับค่าบิตทั้งหมด (true ↔ false) คืนค่า BitArray ใหม่
4public BitArray Or(BitArray value); - ดำเนินการ OR แบบบิต คืนค่า BitArray ใหม่
5public void Set(int index, bool value); - ตั้งค่าบิตที่ตำแหน่งที่ระบุ
6public void SetAll(bool value); - ตั้งค่าบิตทั้งหมดเป็นค่าที่ระบุ
7public BitArray Xor(BitArray value); - ดำเนินการ XOR แบบบิต คืนค่า BitArray ใหม่

ตัวอย่างที่ 1: สร้าง BitArray ตรวจสอบคุณสมบัติ

using System;
using System.Collections;

public class Demo
{
    public static void Main()
    {
        BitArray arr1 = new BitArray(2);
        BitArray arr2 = new BitArray(2);
        arr1[0] = false;
        arr1[1] = true;
        Console.WriteLine("Elements in BitArray1...");
        foreach (bool res in arr1)
        {
            Console.WriteLine(res);
        }
        arr2[0] = false;
        arr2[1] = true;
        Console.WriteLine("Elements in BitArray2...");
        foreach (bool res in arr2)
        {
            Console.WriteLine(res);
        }
        Console.WriteLine("Is BitArray1 equal to BitArray2? = " + arr2.Equals(arr1));
        Console.WriteLine("Is BitArray synchronized? = " + arr2.IsSynchronized);
        Console.WriteLine("Is BitArray read-only? = " + arr2.IsReadOnly);
    }
}

ผลลัพธ์

Elements in BitArray1...
False
True
Elements in BitArray2...
False
True
Is BitArray1 equal to BitArray2? = False
Is BitArray synchronized? = False
Is BitArray read-only? = False

ตัวอย่างที่ 2: การดำเนินการ XOR แบบบิต

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

คำอธิบายเพิ่มเติม

  • BitArray ไม่ใช่ generic type เก็บค่าเป็น bool แต่อัดหลายบิตในหน่วยความจำ (8 บิตต่อไบต์)
  • เมธอด And, Or, Xor, Not คืนค่า BitArray ใหม่ ไม่แก้ไขอินสแตนซ์เดิม (immutable operations)
  • Equals() เปรียบเทียบอ้างอิง ใช้ Cast<bool>().SequenceEqual() สำหรับเปรียบเทียบค่า
  • คุณสมบัติ IsSynchronized และ IsReadOnly เสมอคืนค่า false (BitArray ไม่ได้เป็น thread-safe โดยค่าเริ่มต้น)
  • สร้างจากอาร์เรย์บูลีน: new BitArray(bool[]) หรือจากตัวเลข: new BitArray(int[]), new BitArray(byte[])