Anh VetMini có thể giải thích rõ hơn về phép and trong ví dụ trên được không? em có test thì ok, nhưng mà vẫn mù mờ về nó, cảm ơn anh nhiều
Đầu tiên hết, bạn cần hiểu rõ rằng:
1. các toán tử Lô gic trong VBA, And Or và Not là phép tính trên bit chứ không phải trên trị.
Phép tính (N And M) tức là phép đem And tất cả các bit tương ứng giữa N và M. Nếu N và M không có bit nào là 1 ở cùng vị trí thì kết quả sẽ là 0.
Vì vậy, phép tính (N And 1) là phép tính xét xem cái bit nhỏ nhất của N có phải là 1 hay là 0 (số 1 có bit nhỏ nhất là 1 và các bit còn lại là 0)
2. số lẻ có bit nhỏ nhất là 1 và số chẵn có bit này là 0
3. Lênh If xét biểu thức của nó như sau: nếu kết quả là 0 thì coi như False, nếu bất cứ trị nào khác 0 thì coi như True.
Mọt số nguyên có bất cứ bit nào khác 0 thì coi như có trị khác 0.
Chiếu theo 3 điều trên, nếu ta xét kết quả của (N And 1) thì sẽ biết số N đó là chẵn hay lẻ.
Cách này rất hữu hiệu, nhấn mạnh rất hữu hiệu, vì toán tử And bit là toán tử tự nhiên của CPU, nó chạy rất lẹ. Trong khi đó, toán tử Mod cần phải chia, nhân, và trừ mới ra kết quả (*).
(*) Một số trình dịch hiện nay biết chia 2 và nhân 2 có nghĩa là dịch bit về phía trái/phải một bước. Phép dịch bit cũng rất nhanh. Một số trình dịch hạng chiến hơn biết cả Mod 2 có nghĩa là xét bit 1.
Nhưng tôi chưa hề nghe nói VBA có phần tự tối ưu hóa khi dịch code. (tôi chưa nghe không có nghĩa là không có)