2.4.9 Thao tác với bit đơn lẻ (4)

Bây giờ hãy xem chúng ta có thể sử dụng toán tử bitwise cho những mục đích gì. Tưởng tượng rằng bạn đang code một phần quan trọng của hệ điều hành và bạn sử dụng một biến một biến được khai báo như sau →

int FlagRegister;

Biến này lưu trữ nhiều thông tin của hệ điều hành. Mỗi bit của biến sẽ lưu một giá trị yes/no và chỉ một bit trong số đó là của bạn – bit thứ 3 (chú ý là bit được đánh số từ 0 và bit số 0 là bit thấp nhất trong khi bit 31 là bit cao nhất). Những bit còn lại bạn không được phép thay đổi bởi vì nó lưu các giá trị khác. Đây là bit của bạn (đánh dấu bởi “x”) →

FlagRegister: 0000000000000000000000000000×000

Bạn có thể phải làm các task sau:

#1

Kiểm tra trạng thái bit của bạn – tức là bạn phải tìm ra giá trị của bit của bạn; bạn có thể sử dụng các thuộc tính sau để thực hiện nó:

x & 1 = x

x & 0 = 0

Nếu chúng ta áp dụng toán tử & vào biến FlagRegister cùng với giá trị sau

00000000000000000000000000001000

(số 1 phải ở cùng vị trí với bit của bạn) thì kết quả sẽ là

00000000000000000000000000001000 nếu bit của bạn có giá trị “1”

00000000000000000000000000000000 nếu bit của bạn có giá trị “0”

Chuỗi các bit 0, 1 mà nhiệm vụ của nó là lấy ra hoặc thay đổi giá trị của giá trị của một số bit nào đó được gọi là bitmask. Hãy thử tạo ra một bitmask để lấy ra giá trị của bit của bạn. Nó phải trỏ vào bit số 3, bit này có trọng số là 23 = 8. Chúng ta có thể tạo ra một bitmask phù hợp bằng khai báo sau đây:

int TheMask = 8;

Chúng ta cũng có thể dựa vào giá trị của bit để thực hiện các công việc khác nhau như sau