CCalculate.Studio

💾 Máy tính phép toán bit

Các phép toán bit tác động trực tiếp lên từng chữ số nhị phân (bit) trong biểu diễn nhị phân của một số, thay vì coi số đó như một giá trị thập phân trọn vẹn. Máy tính này thực hiện sáu phép toán bit tiêu chuẩn — AND, OR, XOR, NOT, dịch trái và dịch phải — trên các số nguyên 32 bit không âm và hiển thị biểu diễn nhị phân của dữ liệu nhập cùng kết quả.

Cập nhật lần cuối: 2026-07-07
Add as preferred on Google

Hiểu bảng chân trị của các phép toán bit

Mỗi phép toán bit logic tuân theo một bảng chân trị cố định, được áp dụng độc lập cho từng cặp vị trí bit tương ứng.

Bit ABit BANDORXOR
00000
01011
10011
11110
  • Máy tính này giới hạn dữ liệu nhập trong phạm vi của số nguyên 32 bit có dấu (từ 0 đến 2.147.483.647) vì các toán tử bit của JavaScript chuyển đổi nội bộ các số sang biểu diễn 32 bit trước khi thao tác, theo đặc tả ECMAScript.
  • NOT (~A) luôn tạo ra một kết quả mà khi diễn giải như số nguyên 32 bit có dấu sẽ bằng −(A + 1) — máy tính này hiển thị giá trị tương đương 32 bit không dấu (ví dụ ~12 hiển thị là 4.294.967.283 thay vì −13) để biểu diễn nhị phân được hiển thị không gây mơ hồ.
  • Số bước dịch (B) lớn hơn 31 sẽ được máy tính này giới hạn ở 31, vì việc dịch một giá trị 32 bit đi 32 vị trí trở lên trong JavaScript sẽ quay vòng (chỉ dùng 5 bit thấp của số bước dịch) chứ không cho ra 0 như có thể trực giác trông đợi.

Phép toán bit là gì?

Một phép toán bit xử lý một số ở mức từng chữ số nhị phân (bit) của nó, so sánh hoặc dịch chuyển các số 0 và 1 trong biểu diễn cơ số 2 thay vì thực hiện phép tính cơ số 10 thông thường. Mọi số nguyên đều có thể viết ở dạng nhị phân như một chuỗi bit, mỗi bit đại diện cho một lũy thừa của 2 — ví dụ, 12 ở dạng nhị phân là 1100, nghĩa là 1×8 + 1×4 + 0×2 + 0×1.

Các phép toán bit logic — AND, OR, XOR (hoặc loại trừ) và NOT — so sánh các vị trí bit tương ứng của hai số (hoặc đảo các bit của một số) theo những quy tắc chuẩn của logic Boole, áp dụng độc lập cho từng vị trí bit. Các phép dịch — dịch trái và dịch phải — di chuyển toàn bộ các bit của một số sang trái hoặc sang phải một số vị trí xác định, điều này tương đương về mặt toán học với việc nhân hoặc chia cho một lũy thừa của 2.

Các phép toán bit là nền tảng của khoa học máy tính và lập trình cấp thấp: chúng được dùng để đặt, xóa và kiểm tra từng cờ riêng lẻ trong một tập tùy chọn (cờ bit), để nhân và chia nhanh cho các lũy thừa của 2, cho các thuật toán mật mã, cho xử lý đồ họa và màu sắc (kết hợp các kênh đỏ/lục/lam), và để mã hóa dữ liệu gọn nhẹ.

Cách dùng máy tính phép toán bit này

  1. Nhập số thứ nhất (A) là một số nguyên không âm (từ 0 đến 2.147.483.647, phạm vi của số nguyên 32 bit có dấu).
  2. Nhập số thứ hai (B). Với AND, OR và XOR, đây là toán hạng thứ hai được so sánh từng bit với A. Với các phép dịch, đây là số vị trí cần dịch (từ 0 đến 31 là có hiệu lực; giá trị lớn hơn sẽ bị giới hạn ở 31). Với NOT, B bị bỏ qua vì NOT chỉ tác động lên riêng A.
  3. Chọn phép toán: AND, OR, XOR, NOT, dịch trái hoặc dịch phải.
  4. Đọc kết quả thập phân, cùng với biểu diễn nhị phân của A, của B (hoặc số bước dịch), và của kết quả.

Cách hoạt động của từng phép toán bit

AND: bit là 1 chỉ khi cả hai bit tương ứng đều là 1
OR: bit là 1 nếu ít nhất một bit tương ứng là 1
XOR: bit là 1 nếu đúng một bit tương ứng là 1
Dịch trái: A << B = A × 2^B; Dịch phải: A >> B = ⌊A ÷ 2^B⌋
Ví dụ: 12 AND 10 = 8; 12 OR 10 = 14; 12 XOR 10 = 6; 12 << 2 = 48; 12 >> 2 = 3

AND so sánh từng vị trí bit và trả về 1 chỉ khi cả hai bit đều là 1, ngược lại trả về 0. Ví dụ minh họa: 12 (1100) AND 10 (1010) = 8 (1000), vì chỉ vị trí bit thứ ba (giá trị 8) mới là 1 ở cả hai số.

OR so sánh từng vị trí bit và trả về 1 khi ít nhất một trong hai bit là 1. Ví dụ minh họa: 12 (1100) OR 10 (1010) = 14 (1110). XOR (hoặc loại trừ) trả về 1 khi đúng một trong hai bit là 1 (nhưng không phải cả hai). Ví dụ minh họa: 12 (1100) XOR 10 (1010) = 6 (0110).

NOT đảo mọi bit của một số duy nhất (0 thành 1, 1 thành 0). Vì máy tính này làm việc trên các giá trị 32 bit, NOT 12 lật cả 32 bit, tạo ra 4.294.967.283 khi được diễn giải như một số nguyên 32 bit không dấu (chính là biểu diễn bù hai của −13 nếu diễn giải như một số nguyên có dấu).

Dịch trái (A << B) di chuyển mọi bit của A sang trái B vị trí, lấp các bit thấp bị bỏ trống bằng 0 — tương đương với việc nhân A với 2^B. Ví dụ minh họa: 12 << 2 = 48 (tương đương 12 × 2² = 12 × 4 = 48). Dịch phải (A >> B) di chuyển mọi bit của A sang phải B vị trí, loại bỏ các bit thấp — tương đương với phép chia nguyên A cho 2^B, làm tròn xuống. Ví dụ minh họa: 12 >> 2 = 3 (tương đương ⌊12 ÷ 4⌋ = 3).

Những sai lầm thường gặp

  • Nhầm AND/OR theo bit với AND/OR logic (boolean) — các toán tử bit tác động độc lập lên từng bit của một số, trong khi các toán tử logic coi toàn bộ giá trị như một điều kiện đúng/sai duy nhất; hai loại này cho kết quả khác nhau, trừ trường hợp đặc biệt là các giá trị 0 và 1.
  • Trông đợi phép dịch trái với số bước lớn luôn tạo ra một số lớn hơn theo tỷ lệ — dịch đủ xa có thể đẩy các bit có nghĩa vượt qua ranh giới 32 bit, khiến chúng bị loại bỏ (tràn số).
  • Đọc sai kết quả NOT — vì NOT lật từng bit trong cả 32 bit, kết quả thập phân không dấu của ~A trông lớn hơn hẳn chính A, dù theo cách diễn giải bù hai có dấu thì nó thực ra biểu diễn một số âm nhỏ, −(A+1).
  • Coi dịch phải luôn tương đương với phép chia thông thường — dịch phải trên một số nguyên không âm khớp chính xác với phép chia nguyên làm tròn xuống cho một lũy thừa của 2, nhưng hành vi sẽ khác đối với số âm, tùy vào việc dùng phép dịch số học hay phép dịch logic.

Câu hỏi thường gặp

Khác biệt giữa AND theo bit và AND logic là gì?

AND theo bit (&) so sánh hai số theo từng bit và trả về một số mới, trong đó mỗi bit là 1 chỉ khi cả hai bit đầu vào tương ứng đều là 1 — ví dụ, 12 & 10 = 8. AND logic (&&) coi mỗi giá trị trọn vẹn như một điều kiện đúng/sai duy nhất và trả về một trong các toán hạng ban đầu hoặc một giá trị boolean, đánh giá tính đúng/sai chứ không kết hợp từng bit riêng lẻ. Hai toán tử này phục vụ những mục đích khác nhau và nhìn chung cho ra kết quả rất khác nhau.

XOR hoạt động như thế nào?

XOR (hoặc loại trừ) so sánh hai số theo từng bit và trả về 1 ở mỗi vị trí mà đúng một trong hai bit tương ứng là 1 (không phải cả hai, và cũng không phải không bit nào). Với 12 (1100) XOR 10 (1010): so sánh từng vị trí bit cho ra 0110, tức 6 ở hệ thập phân. XOR thường được dùng để đảo bit, phát hiện khác biệt giữa hai giá trị, và trong các phép tính tổng kiểm tra cùng kiểm tra chẵn lẻ đơn giản.

Phép dịch trái làm gì?

Phép dịch trái (A << B) di chuyển mọi bit trong biểu diễn nhị phân của A sang trái B vị trí, lấp các vị trí thấp vừa bỏ trống bằng các số 0. Điều này tương đương về mặt toán học với việc nhân A với 2 lũy thừa B. Ví dụ, 12 << 2 = 48, cùng kết quả với 12 × 2² = 12 × 4 = 48.

Phép NOT theo bit làm gì?

Phép NOT theo bit (~A) đảo mọi bit của A — mọi số 0 thành 1 và mọi số 1 thành 0. Áp dụng cho biểu diễn 32 bit của 12 (00000000000000000000000000001100), NOT tạo ra một giá trị với toàn bộ các bit đó bị lật, giá trị này ở dạng số 32 bit không dấu hiển thị là 4.294.967.283, còn ở dạng số nguyên có dấu thì biểu diễn −13 theo dạng bù hai (theo đồng nhất thức ~A = −(A+1)).

Dịch phải khác phép chia như thế nào?

Với các số nguyên không âm, phép dịch phải (A >> B) cho ra chính xác cùng kết quả với phép chia nguyên làm tròn xuống cho 2^B: A >> B = ⌊A ÷ 2^B⌋. Ví dụ, 12 >> 2 = 3, khớp với ⌊12 ÷ 4⌋ = 3. Hai phép toán có thể lệch nhau với số âm, khi mà loại dịch cụ thể (số học hay logic) ảnh hưởng đến cách xử lý bit dấu — một chi tiết quan trọng trong các ngữ cảnh lập trình cấp thấp.

Vì sao ở đây các phép toán bit bị giới hạn ở số nguyên 32 bit?

Các toán tử bit dựng sẵn của JavaScript (&, |, ^, ~, <<, >>) chuyển đổi nội bộ các toán hạng của chúng sang số nguyên 32 bit trước khi thực hiện phép toán, theo đặc tả ngôn ngữ ECMAScript. Máy tính này phản ánh đúng hành vi tiêu chuẩn đó, nên dữ liệu nhập bị giới hạn trong phạm vi biểu diễn được bằng 32 bit (từ 0 đến 2.147.483.647 đối với các giá trị không âm được chấp nhận ở đây).

Tài liệu tham khảo

  1. Warren HS Jr. Hacker's Delight. 2nd ed. Addison-Wesley, 2012. (Standard reference for bitwise algorithms and two's-complement arithmetic.)
  2. ECMA International. ECMA-262: ECMAScript Language Specification, §6.1.6.1 (Bitwise operators, ToInt32/ToUint32). ecma-international.org.
  3. Patterson DA, Hennessy JL. Computer Organization and Design: The Hardware/Software Interface. 5th ed. Morgan Kaufmann, 2013. (Binary representation and bitwise logic.)

Lý thuyết số · Tất cả máy tính

Máy tính liên quan