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.

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

Common uses

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.

Bài viết: Thời gian/Số

Thời gian Unix: vì sao máy tính đếm thời gian từ năm 1970

Vì sao ngày 1 tháng 1 năm 1970 trở thành mốc thời gian tham chiếu cho hầu hết các hệ thống máy tính.

Biểu thức cron: cách giải mã lịch chạy tác vụ

Cách giải mã một biểu thức như */15 * * * * và biết chính xác khi nào tác vụ sẽ chạy.

Hệ đếm số: vì sao có hệ nhị phân, bát phân và thập lục phân

Vì sao màu #FF5733 trong CSS được viết bằng chữ số thập lục phân thay vì thập phân.

Chênh lệch ngày: vì sao đếm số ngày phức tạp hơn tưởng tượng

Vì sao trừ ngày một cách ngây thơ có thể cho kết quả sai vì năm nhuận.

Tính tuổi: vì sao không đơn giản chỉ là trừ năm

Vì sao chỉ đơn giản trừ năm sinh có thể cho ra tuổi lớn hơn thực tế một tuổi.

Múi giờ: vì sao UTC không giống với GMT

Vì sao UTC không bao giờ thay đổi hai lần một năm, trong khi giờ London (GMT/BST) thì có.

Máy tính thời lượng: cách cộng đúng giờ, phút và giây

Vì sao khi cộng phút và giây cần "chuyển" phần dư sang hàng tiếp theo, giống như trong phép cộng thập phân.

ISO 8601 Duration: cách viết một khoảng thời gian theo định dạng chuẩn

Vì sao PT1H30M có nghĩa là "1 giờ 30 phút", không phải "1 phút 30 giờ".

Số tuần: vì sao các quốc gia khác nhau đếm tuần khác nhau

Vì sao ngày 1 tháng 1 đôi khi thuộc tuần 52 hoặc 53 của năm trước theo chuẩn ISO 8601.

Số La Mã: một hệ thống không có số 0 và không có giá trị theo vị trí hoạt động ra sao

Vì sao IV có nghĩa là 4 chứ không phải 6, và quy tắc trừ hoạt động thế nào trong số La Mã.

IEEE 754: vì sao 0.1 + 0.2 không bằng 0.3 trong code

Vì sao hầu như mọi ngôn ngữ lập trình đều in 0.1 + 0.2 thành 0.30000000000000004.

Số thành chữ: vì sao cần biến chữ số thành từ ngữ

Vì sao các văn bản ngân hàng ghi số tiền cả bằng số lẫn bằng chữ cùng một lúc.