Thời gian/Số
Phép toán bit
AND/OR/XOR/NAND/NOR/XNOR/NOT và dịch bit trên số nguyên có độ rộng cho trước (8/16/32/64 bit) ở bất kỳ hệ số đếm nào.
(số bit dịch, số thập phân)
Bitwise operations work directly on a number's individual bits rather than its value as a whole — the basis for permission flags, network protocols, and low-level optimization.
How to use it
- Enter one or two numbers in any base (binary, hex, decimal) and pick an operation (AND, OR, XOR, NAND, NOR, XNOR, NOT, or a shift).
- Pick a bit width (8/16/32/64 bits) — it affects how NOT and shifts behave at the number's boundaries.
- The result is shown instantly in several number bases for easy comparison.
Common uses
- Working with permission or setting flags packed into a single number (file system access rights, for example).
- Debugging a network protocol or binary format where fields are packed at the individual-bit level.
- A teaching example for understanding binary number representation and operations on it.
Things to keep in mind
The result of NOT and shifts depends on the chosen bit width — the same number gives a different result at 8-bit versus 32-bit width because of the different number of bits involved.
XOR is often used to toggle a flag — applying XOR twice with the same value returns the original.
Bài viết về công cụ này: Phép toán bit: AND, OR và XOR hoạt động như thế nào ở cấp độ bit
Câu hỏi thường gặp
Sự khác biệt giữa AND, OR, XOR, NAND, NOR, XNOR và NOT là gì?
AND cho kết quả 1 chỉ khi cả hai bit đều là 1, OR cho 1 khi ít nhất một bit là 1, và XOR cho 1 khi các bit khác nhau. NAND/NOR/XNOR là phủ định của chúng, còn NOT đảo ngược mỗi bit của một toán hạng duy nhất.
Độ rộng bit và dấu của một số được xử lý như thế nào?
Chọn độ rộng 8/16/32/64 bit — các phép toán và dịch chuyển diễn ra trong phạm vi đó. Số âm được biểu diễn bằng bù hai, nên kết quả của NOT hoặc phép dịch chuyển có thể trông bất ngờ nếu bạn quen với ký hiệu thập phân.
Sự khác biệt giữa dịch trái và dịch phải là gì?
Dịch trái (<<) thêm số 0 vào bên phải, thực chất là nhân với 2 lũy thừa số lượng dịch chuyển. Dịch phải có thể là logic (thêm số 0 vào bên trái) hoặc số học (giữ nguyên bit dấu) — loại nào tùy thuộc vào chế độ đã chọn.
Vì sao biểu thức như "if (a & b == c)" thường không hoạt động như mong đợi?
Trong hầu hết ngôn ngữ, toán tử so sánh == có độ ưu tiên cao hơn toán tử bit &, nên biểu thức được tính là "a & (b == c)", không như tác giả thường mong muốn. Để tránh cái bẫy này, hãy luôn đặt các phép toán bit trong dấu ngoặc rõ ràng.
Vì sao dùng cờ bit thay vì các biến boolean riêng lẻ?
Một tập hợp cờ được gói gọn trong một số duy nhất sẽ được lưu trữ và truyền đi gọn hơn (ví dụ trong giao thức mạng hoặc định dạng tệp), và việc kiểm tra hay thay đổi một cờ cụ thể bằng AND/OR/XOR chỉ là một phép toán nhanh duy nhất.