Tôi sẽ rõ ràng hơn ở đây vì tôi nghĩ mặt nạ bitwise là một công cụ tuyệt vời nên nằm trong bất kỳ vành đai nhà phát triển nào. Tôi sẽ cố gắng mở rộng các câu trả lời ở trên.Thứ nhất, một ví dụ của việc sử dụng một số nguyên để duy trì cờ trạng thái (sử dụng phổ biến):
// These are my masks
private static final int MASK_DID_HOMEWORK = 0x0001;
private static final int MASK_ATE_DINNER = 0x0002;
private static final int MASK_SLEPT_WELL = 0x0004;
// This is my current state
private int m_nCurState;
Để thiết trạng thái của tôi, tôi sử dụng bitwise OR:
// Set state for'ate dinner' and 'slept well' to 'on'
m_nCurState = m_nCurState | (MASK_ATE_DINNER | MASK_SLEPT_WELL);
Chú ý cách tôi 'hoặc' trạng thái hiện tại của tôi với các trạng thái mà tôi muốn bật 'bật'. Ai biết được tình trạng hiện tại của tôi là gì và tôi không muốn thổi bay nó đi.
Để unset trạng thái của tôi, tôi sử dụng các phép toán AND điều hành với các nhà điều hành bổ sung:
// Turn off the 'ate dinner' flag
m_nCurState = (m_nCurState & ~MASK_ATE_DINNER);
Để séc trạng thái hiện tại của tôi, tôi sử dụng và nhà điều hành:
// Check if I did my homework
if (0 != (m_nCurState & MASK_DID_HOMEWORK)) {
// yep
} else {
// nope...
}
Tại sao tôi nghĩ điều này thú vị? Nói rằng tôi đang thiết kế một giao diện thiết lập trạng thái của tôi. Tôi có thể viết một phương pháp mà chấp nhận ba boolean:
void setState(boolean bDidHomework, boolean bAteDinner, boolean bSleptWell);
Hoặc, tôi có thể sử dụng một số duy nhất để đại diện cho tất cả ba trạng thái và thông qua một giá trị duy nhất:
void setState(int nStateBits);
Nếu bạn chọn mô hình thứ hai bạn sẽ rất hạnh phúc khi quyết định thêm một trạng thái khác - bạn sẽ không phải bẻ khóa các giao diện hiện tại của giao diện của mình.
Hai xu của tôi. Cảm ơn.
Không có gì cụ thể về việc sử dụng toán tử bitwise trong "ngôn ngữ web". Nó là vô nghĩa như yêu cầu * khi nào bạn sẽ sử dụng một bộ lọc mờ xuyên tâm trong thiết kế web? *. Bản sao của http://stackoverflow.com/questions/276706/what-are-bitwise-operators, http://stackoverflow.com/questions/1746613/bitwise-operation-and-usage, http://stackoverflow.com/ câu hỏi/1167956/tài nguyên để học-bitwise-lập trình và những người khác. –