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

ได้/ตั้งค่าบิตที่ตำแหน่งเฉพาะใน BitArray ใน C#

BitArray ให้ property indexer [int index] และเมธอด Get(int index) / Set(int index, bool value) สำหรับเข้าถึงบิตแต่ละตำแหน่ง (0-based) โดยตรง

ตัวอย่างโค้ดที่ 1: ตั้งค่าและอ่านบิต

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("BitArray1 length = " + arr1.Length);
        Console.WriteLine("BitArray1 first element = " + arr1.Get(0));

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

        Console.WriteLine("\nBitArray2 length = " + arr2.Length);
        Console.WriteLine("Elements in BitArray2...");
        foreach (bool res in arr2)
        {
            Console.WriteLine(res);
        }

        Console.WriteLine("\nIs BitArray1 equal to BitArray2? = " + arr2.Equals(arr1));
    }
}

ผลลัพธ์

BitArray1 length = 2
BitArray1 first element = False
BitArray2 length = 2
Elements in BitArray2...
False
True
Is BitArray1 equal to BitArray2? = False

ตัวอย่างโค้ดที่ 2: อัปเดตบิตและเปรียบเทียบ

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("BitArray1 length = " + arr1.Length);
        Console.WriteLine("BitArray1 first element = " + arr1.Get(0));

        // อัปเดตบิต index 0
        arr1[0] = true;
        Console.WriteLine("BitArray1 first element [UPDATED] = " + arr1.Get(0));

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

        Console.WriteLine("\nBitArray2 length = " + arr2.Length);
        Console.WriteLine("Elements in BitArray2...");
        foreach (bool res in arr2)
        {
            Console.WriteLine(res);
        }

        Console.WriteLine("\nIs BitArray1 equal to BitArray2? = " + arr2.Equals(arr1));
    }
}

ผลลัพธ์

BitArray1 length = 2
BitArray1 first element = False
BitArray1 first element [UPDATED] = True
BitArray2 length = 2
Elements in BitArray2...
False
True
Is BitArray1 equal to BitArray2? = False

เมธอดและ Property สำคัญของ BitArray

Memberประเภทคำอธิบาย
[int index]Indexer (get/set)อ่าน/เขียนบิตที่ index (bool)
Get(int index)Methodอ่านบิตที่ index (เหมือน indexer get)
Set(int index, bool value)Methodตั้งค่าบิตที่ index (เหมือน indexer set)
LengthPropertyจำนวนบิตทั้งหมด
CountPropertyเหมือน Length (สำหรับ ICollection)

การดำเนินการบิตวایز (Bitwise Operations)

  • And(BitArray) - AND
  • Or(BitArray) - OR
  • Xor(BitArray) - XOR
  • Not() - NOT (กลับค่าทุกบิต)

ทั้งหมด แก้ไขอินสแตนซ์ปัจจุบัน (mutate) และคืนค่า this

ข้อควรระวัง

  • Index ต้องอยู่ในช่วง 0 <= index < Length มิฉะนั้นโยน IndexOutOfRangeException
  • Equals() เปรียบเทียบ reference ไม่ใช่ค่า - ใช้ Cast<bool>().SequenceEqual() (LINQ) เพื่อเปรียบเทียบค่า
  • BitArray ประหยัดหน่วยความจำ - 1 บิตต่อค่า (vs 1 ไบต์ของ bool[])
  • ไม่รองรับการ resize - ต้องสร้างใหม่หากต้องการขนาดต่างกัน