Kết nối qua MCP →

Nhập phép tính

Công thức

Quảng cáo

Kết quả

Mã bù 1
250
111110102 (8-bit)
Số gốc (thập phân) 5
Số gốc (nhị phân) 00000101
Mã bù 1 (nhị phân) 11111010
Mã bù 1 (thập phân) 250
Độ rộng bit 8

Mã bù 1 là gì?

Mã bù 1 (one's complement) của một số nhị phân được tạo ra bằng cách đảo (nghịch đảo) toàn bộ các bit: mỗi bit 0 trở thành 1 và mỗi bit 1 trở thành 0. Vì kết quả phụ thuộc vào số lượng bit bạn dùng, bạn cần chọn một độ rộng bit như 4, 8, 16 hoặc 32 bit. Cách biểu diễn này từng được dùng trong các máy tính đời đầu để mã hóa số nguyên có dấu, và đến nay vẫn quan trọng khi học số học nhị phân cũng như các tổng kiểm tra (checksum) phát hiện lỗi.

Giá trị nhị phân tám bit với mỗi bit được đảo để tạo ra số bù một của nó
Bù một đảo từng bit trong độ rộng bit đã chọn.

Cách sử dụng máy tính này

Nhập một số thập phân không âm, chọn độ rộng bit, và máy tính sẽ giới hạn (mask) số đó theo độ rộng đã chọn, đảo toàn bộ các bit, rồi hiển thị kết quả ở cả dạng nhị phân lẫn thập phân. Nếu số của bạn lớn hơn mức mà độ rộng cho phép, chỉ những bit thấp nhất nằm trong độ rộng đó được giữ lại trước khi đảo.

Giải thích công thức

Ta tính

$$\text{Result} = \left(\sim\left(\text{Number} \,\&\, M\right)\right) \,\&\, M, \quad M = 2^{\text{Width}} - 1$$

Số hạng \(2^{w} - 1\) là một mặt nạ gồm w bit 1 (với 8 bit thì đó là 11111111 = 255). Phép NOT theo bit (~) đảo từng bit của n, còn mặt nạ loại bỏ mọi bit vượt quá độ rộng đã chọn để kết quả luôn nằm trong phạm vi cho phép.

Bốn dải độ rộng bit gồm 4, 8, 16 và 32 ô hiển thị với độ dài tăng dần
Độ rộng bit quyết định số bit được đảo.

Ví dụ minh họa

Lấy số 5 với độ rộng 8 bit. Ở dạng nhị phân, \(5 = 00000101\). Đảo tất cả các bit ta được \(11111010\), tương đương 250 trong hệ thập phân. Vậy mã bù 1 của 5 trong 8 bit là 250. Với 4 bit, \(5 = 0101\), đảo lại thành \(1010 = 10\).

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

Mã bù 1 khác mã bù 2 ở chỗ nào? Mã bù 2 (two's complement) cộng thêm 1 vào mã bù 1, nhờ đó tránh được việc số 0 có tới hai cách biểu diễn.

Mã bù 1 của số 0 là gì? Với 8 bit, đó là 11111111 = 255 — tất cả các bit đều thành 1.

Tại sao kết quả thay đổi theo độ rộng bit? Việc đảo bit phụ thuộc vào số lượng bit hiện có; độ rộng càng lớn thì càng có thêm nhiều bit 1 ở phía trước, tạo ra giá trị thập phân lớn hơn.

Cập nhật lần cuối: