BitArray trong C#

Ở trong hướng dẫn trước chúng ta đã tìm hiểu về lớp Queue trong C# - một non-generic collection trong loạt bài hướng dẫn về Collection trong C#. Queue (hàng đời) là một collection đặc biệt lưu trữ các phần tử theo kiểu FIFO (First In First Out - Vào trước ra trước). Bạn có thể tìm hiểu Queue tại đây nếu như chưa xem:

Queue trong C# | Comdy
Queue trong C# là gì? Queue trong C# dùng để làm gì? Cách sử dụng Queue trong C#.

Trong hướng dẫn này chúng ta sẽ tìm hiểu về lớp BitArray trong C#. Lớp BitArray quản lý một mảng của các giá trị bit, được biểu diễn như là Boolean, là cái mà true biểu thị bởi bit on (1) và false biểu thị bit là off (0).

Nó được sử dụng khi bạn cần lưu trữ các bit nhưng không biết trước số bit. Bạn có thể truy cập vào các phần tử của BitArray bằng cách sử dụng chỉ mục, bắt đầu từ số không.

Các thành viên quan trọng của BitArray

Các thuộc tính quan trọng của BitArray:

Thuộc tính Mô tả
Count Trả về số phần tử chứa trong BitArray.
IsReadOnly Trả về giá trị xem BitArray có phải là chỉ đọc hay không.
Item Trả về hoặc thiết lập giá trị của phần tử tại vị trí được chỉ định trong BitArray.
Length Trả về hoặc thiết lập số phần tử trong BitArray.

Các phương thức quan trọng của BitArray:

STT Phương thức
1 public BitArray And(BitArray value);

Thực hiện thao tác bitwise AND giữa các phần tử của đối tượng BitArray hiện tại và các phần tử tương ứng trong BitArray đã chỉ định. Đối tượng BitArray hiện tại sẽ được sửa đổi để lưu trữ kết quả của thao tác bitwise AND.

2 public bool Get(int index);

Lấy giá trị của bit tại một vị trí đã xác định trong BitArray

3 public BitArray Not();

Đảo ngược tất cả giá trị bit trong BitArray hiện tại, các phần tử được thiết lập là true được chuyển đổi thành false, và các phần tử được thiết lập là false được chuyển đổi thành true.

4 public BitArray Or(BitArray value);

Thực hiện thao tác bitwise OR giữa các phần tử của đối tượng BitArray hiện tại và các phần tử tương ứng trong BitArray đã chỉ định. Đối tượng BitArray hiện tại sẽ được sửa đổi để lưu trữ kết quả của thao tác OR theo bit.

5 public void Set(int index, bool value);

Thiết lập bit tại một vị trí đã xác định trong BitArray tới value đã cho

6 public void SetAll(bool value);

Thiết lập tất cả bit trong BitArray tới value đã cho

7 public BitArray Xor(BitArray value);

Thực hiện thao tác bitwise Exclusive OR giữa các phần tử của đối tượng BitArray hiện tại so với các phần tử tương ứng trong BitArray đã chỉ định. Đối tượng BitArray hiện tại sẽ được sửa đổi để lưu trữ kết quả của thao tác Exclusive OR theo bit.

Ví dụ dưới đây minh họa khởi tạo BitArray:

BitArray myBitArr = new BitArray(5); 

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

myBitArr.Set(4, true);

Console.WriteLine("Value 2 = {0}", myBitArr.Get(2));
Console.WriteLine("Value 3 = {0}", myBitArr.Get(3));
Console.WriteLine("Value 4 = {0}", myBitArr.Get(3));
Console.WriteLine("Total = {0}", myBitArr.Count); 
Console.WriteLine("Read Only = {0}", myBitArr.IsReadOnly);  

Đây là kết quả khi biên dịch và chạy chương trình:

Value 2 = False
Value 3 = True
Value 4 = True
Total = 5
Read Only = false

Các xử lý trên bit

Phương thức And

Phương thức And() sẽ thực hiện thao tác bitwise AND giữa các phần tử của đối tượng BitArray hiện tại và các phần tử tương ứng trong BitArray đã chỉ định. Đối tượng BitArray hiện tại sẽ được sửa đổi để lưu trữ kết quả của thao tác bitwise AND.

Ví dụ sau minh họa về phương thức Or trong BitArray:

BitArray myBitArr1 = new BitArray(4);
BitArray myBitArr2 = new BitArray(4); 

myBitArr1[0] = false; 
myBitArr1[1] = false; 
myBitArr1[2] = true; 
myBitArr1[3] = true; 

myBitArr2[0] = false; 
myBitArr2[1] = true; 
myBitArr2[2] = false; 
myBitArr2[3] = true; 

BitArray myBitArr3 = myBitArr1.And(myBitArr2);		
foreach(var item in myBitArr3) 
{ 
	Console.WriteLine(item); 
} 

Đây là kết quả khi biên dịch và chạy chương trình:

False
False
False
True

Phương thức Or

Phương thức Or() thực hiện thao tác bitwise OR giữa các phần tử của đối tượng BitArray hiện tại và các phần tử tương ứng trong BitArray đã chỉ định. Đối tượng BitArray hiện tại sẽ được sửa đổi để lưu trữ kết quả của thao tác OR theo bit.

Ví dụ sau minh họa về phương thức Or trong BitArray:

BitArray myBitArr1 = new BitArray(4);
BitArray myBitArr2 = new BitArray(4); 

myBitArr1[0] = false; 
myBitArr1[1] = false; 
myBitArr1[2] = true; 
myBitArr1[3] = true; 

myBitArr2[0] = false; 
myBitArr2[1] = true; 
myBitArr2[2] = false; 
myBitArr2[3] = true; 

BitArray myBitArr3 = myBitArr1.Or(myBitArr2);		
foreach(var item in myBitArr3) 
{ 
	Console.WriteLine(item); 
} 

Đây là kết quả khi biên dịch và chạy chương trình:

False
True
True
True

Phương thức Not

Phương thức Not() sẽ đảo ngược tất cả giá trị bit trong BitArray hiện tại, các phần tử được thiết lập là true được chuyển đổi thành false, và các phần tử được thiết lập là false được chuyển đổi thành true.

Ví dụ sau minh họa về phương thức Not trong BitArray:

BitArray myBitArr1 = new BitArray(4);

myBitArr1[0] = false; 
myBitArr1[1] = false; 
myBitArr1[2] = true; 
myBitArr1[3] = true;

BitArray myBitArr2 = myBitArr1.Not();
		
foreach(var item in myBitArr2) 
{ 
	Console.WriteLine(item); 
} 

Đây là kết quả khi biên dịch và chạy chương trình:

True
True
False
False

Phương thức Xor

Phương thức Xor() thực hiện thao tác bitwise Exclusive OR giữa các phần tử của đối tượng BitArray hiện tại so với các phần tử tương ứng trong BitArray đã chỉ định. Đối tượng BitArray hiện tại sẽ được sửa đổi để lưu trữ kết quả của thao tác Exclusive OR theo bit.

Ví dụ sau minh họa về phương thức Xor trong BitArray:

BitArray myBitArr1 = new BitArray(4);
BitArray myBitArr2 = new BitArray(4); 

myBitArr1[0] = false; 
myBitArr1[1] = false; 
myBitArr1[2] = true; 
myBitArr1[3] = true; 

myBitArr2[0] = false; 
myBitArr2[1] = true; 
myBitArr2[2] = false; 
myBitArr2[3] = true; 

BitArray myBitArr3 = myBitArr1.Xor(myBitArr2);
		
foreach(var item in myBitArr3) 
{ 
	Console.WriteLine(item); 
} 

Đây là kết quả khi biên dịch và chạy chương trình:

False
True
True
False

BitArray là lớp cuối cùng trong loạt bài hướng dẫn về non-generic collection trong C#. Ở hướng dẫn tiếp theo chúng ta sẽ tìm hiểu về lớp List<T> - một generic collection trong C#.

List<T> trong C# | Comdy
List<T> trong C# là gì? List<T> trong C# dùng để làm gì? Cách sử dụng List<T> trong C#.
Lập Trình C#Lập Trình C# Cơ Bản
Bài Viết Liên Quan:
int[] và int[,] trong C#: Ai nhanh hơn
Trung Nguyen 10/10/2020
int[] và int[,] trong C#: Ai nhanh hơn

Hiểu được sự khác biệt giữa các loại mảng trong C# sẽ giúp bạn chọn cấu trúc dữ liệu chính xác cho mọi trường hợp.

Struct và class trong C#: Ai nhanh hơn
Trung Nguyen 09/10/2020
Struct và class trong C#: Ai nhanh hơn

Trong bài viết này, tôi sẽ so sánh sự khác biệt về hiệu suất giữa struct và class trong C#: Ai nhanh hơn.

Best practice cho performance trong C#
Trung Nguyen 03/10/2020
Best practice cho performance trong C#

Mục tiêu của bài viết này là cung cấp một danh sách không đầy đủ các code mẫu cần tránh, vì chúng rủi ro hoặc performance kém.

Đọc ghi file (File I/O) trong C#
Trung Nguyen 26/04/2020
Đọc ghi file (File I/O) trong C#

Hướng dẫn này sẽ giúp bạn tìm hiểu về đọc ghi file (File I/O) trong C# và sử dụng các lớp tiện ích để đọc ghi file.