BitArray trong C#
Khóa học lập trình C# nâng cao

Danh sách bài học
BitArray trong C#
Nội dung bài viết Học nhanh
Dẫn nhập
Ở các bài học trước, chúng ta đã cùng nhau tìm hiểu về QUEUE TRONG C#. Hôm nay chúng ta sẽ cùng tìm hiểu về BitArray trong C#.
Nội dung
Để đọc hiểu bài này tốt nhất các bạn nên có kiến thức cơ bản về các phần:
- BIẾN , KIỂU DỮ LIỆU, TOÁN TỬ trong C#
- CÂU ĐIỀU KIỆN trong C#
- Cấu trúc cơ bản của VÒNG LẶP, HÀM trong C#
- MẢNG trong C#
- LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG TRONG C#
Trong bài học này, chúng ta sẽ cùng tìm hiểu các vấn đề:
- BitArray là gì?
- Một số thuộc tính và phương thức hỗ trợ sẵn trong BitArray.
BitArray là gì?
BitArray là một Collections giúp quản lý, lưu trữ một danh sách các bit (0 hoặc 1), được biểu diễn như kiểu Boolean (kiểu luận lý). Trong đó true biểu thị cho bit 1 và false biểu thị cho bit 0.
Nó được sử dụng khi ta cần lưu trữ danh sách các bit mà chưa biết trước số lượng. Ta có thể truy cập đến các phần tử trong BitArray thông qua chỉ số như ArrayList.
Sẽ có bạn thắc mắc sao không dùng mảng các đối tượng kiểu bool mà lại dùng BitArray?
Thì câu trả lời là BitArray giúp tiết kiệm bộ nhớ hơn rất nhiều:
- Mặc dù kiểu bool chỉ lưu 2 giá trị true hoặc false nhưng lại tốn đến 1 bytes cho mỗi biến kiểu bool.
- Trong khi đó mỗi phần tử trong BitArray tốn đúng 1 bit để lưu trữ.
Trước khi sử dụng ta cần khởi tạo vùng nhớ bằng toán tử new.
Lưu ý: là ta không thể khởi tạo 1 BitArray rỗng!
Đầu tiên có thể khởi tạo BitArray và cho biết số phần tử ban đầu của BitArray:
Nếu bạn không muốn giá trị mặc định là false thì bạn có thể chỉ định giá trị mặc định thông qua constructor:
Có thể khởi tạo một BitArray từ một mảng bool có sẵn:
Hoặc khởi tạo một BitArray từ một mảng byte có sẵn:
Đối với trường hợp này ta có thể cách lưu trữ của nó như sau:
- Đầu tiên ta đã biết 1 byte = 8 bits.
- Khi đó trình biên dịch sẽ chuyển các số kiểu byte sang dạng 8 bits và lưu lần lượt vào BitArray. Như vậy trường hợp trên sẽ có 5 số kiểu byte tương đương với 40 bits sẽ được lưu vào BitArray.
- Thử in giá trị các phần tử BitArray trên để kiểm chứng:
Để dễ nhìn thì cứ in được 8 bits thì mình sẽ xuống dòng. Bạn lưu ý đây chỉ là cách mình hiển thị lên màn hình thôi chứ bên trong vẫn là 1 mảng các bit duy nhất:
Gợi ý: Bạn có thể thử đổi các bit trên xem có giống 5 số kiểu byte ban đầu không nhé!
Tương tự bạn cũng có thể khởi tạo một BitArray từ một mảng các số nguyên int có sẵn:
Trường hợp này tương tự như trên nhưng lúc này kiểu int chiếm 4 bytes nên ta sẽ đổi 4 bytes = 32 bits. Và Trình biên dịch sẽ chuyển mỗi số nguyên int sang 32 bits và lưu vào ArrayList:
Một số thuộc tính và phương thức hỗ trợ sẵn trong BitArray
Một số thuộc tính thông dụng trong BitArray:
TÊN THUỘC TÍNH |
Ý NGHĨA |
Count |
Trả về 1 số nguyên là số phần tử hiện có trong BitArray. |
Length |
Trả về 1 số nguyên là số phần tử hiện có trong BitArray. |
Một số phương thức thông dụng trong BitArray:
TÊN PHƯƠNG THỨC |
Ý NGHĨA |
And(BitArrayValue) |
Thực hiện phép toán AND bit giữa dãy bit hiện tại với dãy bit Value |
Clone() |
Tạo 1 bản sao từ BitArray hiện tại. |
CopyTo(Array array, int Index) |
Thực hiện sao chép tất cả phần tử trong BitArray sang |
Get(int Index) |
Trả về giá trị của bit tại vị trí Index trong BitArray. |
Not() |
Trả về 1 BitArray là kết quả của phép toán NOT trên dãy bit hiện tại. |
Or(BitArray Value) |
Trả về 1 BitArray là kết quả của phép toán OR giữa dãy bit hiện tại với dãy bit Value. |
Set(int Index, bool Value) |
Gán giá trị cho bit tại vị trí Index với giá trị mới là Value. |
SetAll(bool Value) |
Gán giá trị cho toàn bộ các bit trong BitArray với giá trị mới là Value. |
Xor(BitArray Value) |
Trả về 1 BitArray là kết quả của phép toán XOR giữa dãy bit hiện tại với dãy bit Value. |
Lưu ý:
- Các phép toán AND, OR, NOT, XOR đã được trình bày trong bài TOÁN TỬ TRONG C# các bạn có thể xem lại.
- Các phép toán AND, OR, NOT, XOR phải được thực hiện trên 2 BitArray có cùng độ dài nếu không sẽ báo lỗi.
- Các phép toán AND, OR, NOT, XOR sẽ làm thay đổi cả BitArray gọi nó. Ví dụ:
Thì kết quả của phép AND sẽ được cập nhật giá trị vào BitArray A.
Một ví dụ đơn giản về sử dụng BitArray
Một chương trình đơn giản về BitArray:
Kết quả: khi chạy đoạn chương trình trên:
Các bạn có thể tự kiểm tra lại xem có đúng không nhé!
Kết luận
Nội dung bài này giúp các bạn nắm được:
- BitArray là gì?
- Một số thuộc tính và phương thức hỗ trợ sẵn trong BitArray.
Bài học sau chúng ta sẽ cùng tìm hiểu về GENERIC TRONG C#.
Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của mình để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó”.
Tải xuống
Tài liệu
Nhằm phục vụ mục đích học tập Offline của cộng đồng, Kteam hỗ trợ tính năng lưu trữ nội dung bài học BitArray trong C# dưới dạng file PDF trong link bên dưới.
Ngoài ra, bạn cũng có thể tìm thấy các tài liệu được đóng góp từ cộng đồng ở mục TÀI LIỆU trên thư viện Howkteam.com
Đừng quên like và share để ủng hộ Kteam và tác giả nhé!

Thảo luận
Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.
Tác giả/Dịch giả
Khóa học
Khóa học lập trình C# nâng cao
Bạn đã học hết các khoá học về C# CƠ BẢN, LẬP TRÌNH WINFORM thậm chí là LẬP TRÌNH WPF nhưng vẫn bối rối trước những hướng dẫn về CÁC PROJECT THỰC TẾ của Kteam?
Hoặc bạn nghe nói mãi về .NET nhưng vẫn thắc mắc nó có gì hay ho bên trong đó?
Hay đơn giản bạn viết muốn 1 đoạn code cực kỳ nguy hiểm khiến người khác khi nhìn vào phải thốt lên: “Ồ!!!......... Trẻ trâu…”
Khoá học lần này sẽ giúp bạn giải đáp những thắc mắc trên. Chào mừng các bạn đã đến với khoá học Lập trình C# nâng cao của Kteam.
Anh Long cho em hỏi: Trong thực tế có những trường hợp nào sử dụng Bit Array anh? Cảm ơn anh
mình thấy khi khởi tạo BitArray từ 1 mảng byte, các bit trong 1 byte sẽ bị đảo ngược lại, khi CopyTo 1 BitArray sang 1 mảng byte cũng thế, admin có thể giải thích giúp mình tại sao lại như vậy không.
Em nghĩ chỉ cần dùng BitArray XorBit = MyBA6.Clone() được rồi, cần gì phải " as BitArray" nữa ạ ?
Anh giải thích giúp em cái hàm "PrintBits" với
Cái ví dụ cuối thiếu cái function "PrintBits" rồi Admin ơi.