Toán tử AND trong thao tác với bit

     0011(số thập phân 5)
AND 
     0010(số thập phân 3)
=    0010(số thập phân 2)

Em đọc trên wiki có đoạn

“Vì kết quả 0010 là khác 0, ta biết là bit thứ 2 trong dãy bit ban đầu đã được thiết đặt. Điều này được gọi là che đậy bit. (Bằng phép loại suy, công dụng của mặt nạ, các phần không nên bị thay thế hoặc các phần không được quan tâm. Trong trường hợp này, các giá trị 0 che đậy cho các bit không được quan tâm).”

không hiểu xin mọi người giải thích. Cảm ơn

Đọc bản English đi bạn, ông nào dịch cà chớn quá:

2 Likes

Đọc đau não quá, phải map từ mặt nạ sang từ bitmark, hơn nữa còn mắc lỗi dịch quá sát nên bạn không hiểu cũng phải

1 Like

Bạn đang trích bit phải không? Chứ bitmask nhiều cách dùng lắm.

Với a là bit thì: a AND 0 = 0 và a AND 1 = a
a OR 0 = a và a OR 1 = 1

Khi trích lấy bit thì sẽ có phần so sánh, mà so sánh với 0 thì dễ nhất nên chỉ có thể dùng AND để trích bit.

1 Like

Bạn có 1 số chả C = 5 và số char thì nó bao gồm 8 bit từ bit số 0 đến bit số 7. Biểu diễn dưới dạng bit của C sẽ là 00000101.

Bạn muốn kiểm tra một bit bất kỳ giữa 0 và 7 ví dụ bit số 0 thì cách đơn giản là bạn xoá các bit không cần kiểm tra về 0. Khi đó kết quả thu được =0 nếu bit cần kiểm tra =0, >0 nếu bit cần kiểm tra =1.
Để làm điều đó bạn sẽ AND C với một số mà bit số 0 bạn set = 1 và các bit khác là 0. Nó chính là 00000001 gọi là MASK (mặt nạ - sẽ che đi các bit không cần quan tâm). Kết quả:

C    = 00000101
MASK = 00000001
KQ   = 00000001

Nhìn kết quả bạn sẽ thấy kết quả là giá trị của C đã bị clear các bit từ 1 đến 7 do nó được and với một số mà bit số 1->7 là 0. KQ>0 chứng tỏ bit 0 của C=1.
Tương tự nếu kiểm tra bit số 1 của C thì MASK bây giờ là 00000010. Kết quả sẽ = 0 chứng tỏ bit 1 của C=0.

Thực tế MASK ít được viết dưới dạng bit 0-1 mà viết dưới dạng hexa.

00000001 = 0x01 // bit 0
00000010 = 0x02 // bit 1
00000100 = 0x04 // bit 2
00001000 = 0x08 // bit 3
00010000 = 0x10 // bit 4
......
1 Like

A post was merged into an existing topic: Topic lưu trữ các post off-topic - version 3

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?