Bù 2 (tiếng Anh: two's complement) là một hệ thống số trong hệ nhị phân, được tạo ra bằng cách lấy bù đúng (true complement) của một số khác. Để tạo số bù 2, ta đảo tất cả các bit trong số nhị phân (đổi 1 thành 0 và ngược lại) và sau đó cộng thêm 1 vào kết quả. Nói cách khác, số bù 2 là số bù 1 cộng thêm 1. Để tính nhanh, ta thường bắt đầu từ số nhị phân của số dương cần lấy âm, từ phải qua trái giữ 1 đầu tiên và đảo tất cả các bit còn lại bên trái số 1 (chỉ áp dụng khi bit cực phải là 1).
Phương pháp bù 2 là cách thường dùng để biểu diễn số âm trong máy tính. Trong phương pháp này, bit cực trái (bit bên trái nhất của byte) được sử dụng làm bit dấu (sign bit - bit biểu thị dấu của số) với quy ước: nếu bit dấu là 0, số là dương; nếu bit dấu là 1, số là âm. Các bit còn lại dùng để biểu diễn giá trị của số.
Ví dụ: số nguyên −5 trong hệ thập phân được biểu diễn theo phương pháp bù 2 trong máy tính như sau (với định dạng 8 bit):
-
- Bước 1: Biểu diễn số nguyên 5 trong hệ thập phân dưới dạng nhị phân là: 0000 0101.
- Bước 2: đảo tất cả các bit từ bước 1. Kết quả sau khi đảo là: 1111 1010.
- Bước 3: cộng thêm 1 vào kết quả từ bước 2. Sau khi cộng, kết quả là: 1111 1011
- Bước 3: cộng thêm 1 vào kết quả từ bước 2. Sau khi cộng, kết quả là: 1111 1011
- Lưu ý: Đối với số âm, bit cực trái luôn là 1.
- Như vậy, theo phương pháp bù 2, số −5 trong hệ thập phân được biểu diễn trong máy tính là: 1111 1011.
Ngoài cách tính theo định nghĩa đã nêu, bạn cũng có thể áp dụng phương pháp bù 2 theo quy tắc sau: với biểu diễn nhị phân của một số dương, để biểu diễn số âm tương ứng, tìm bit đầu tiên có giá trị 1 từ phải qua trái. Sau đó, đảo tất cả các bit từ bit ngay trước bit 1 đó đến bit cực trái, và luôn đảm bảo bit cực trái là 1.
Ví dụ: hãy biểu diễn lại số nguyên −5 từ hệ thập phân sang hệ nhị phân theo quy tắc mới này (với định dạng 8 bit):
- Bước 1: biểu diễn số nguyên 5 trong hệ thập phân dưới dạng nhị phân là: 0000 0101.
- Bước 2: từ phải qua trái, tìm bit đầu tiên có giá trị 1, đó là bit đầu tiên (tính từ bên phải).
- Bước 3: đảo tất cả các bit trước bit tìm thấy ở bước 2. Kết quả là: 1111 1011
- Bước 4: vì số âm, bit cực trái luôn được giữ là 1.
- Số −5 trong hệ thập phân được biểu diễn bằng phương pháp bù 2 trên máy tính là: 1111 1011 (tương tự như kết quả trong ví dụ trước).
Thực hiện phép cộng với số bù 2
Khi thực hiện phép cộng với số âm được biểu diễn bằng phương pháp bù 2, chúng ta tiến hành phép cộng nhị phân bình thường. Nếu trong quá trình cộng, khi đạt đến bit cực trái mà vẫn có bit nhớ, thì bit nhớ này sẽ bị loại bỏ.
Ví dụ:
1. Cộng hai số thập phân −5 và 2 (theo mẫu 8 bit):
1111 1011 (bù 2 của −5) + 0000 0010 (số 2 trong hệ nhị phân) =========== 1111 1101 (bù 2 của −3)
2. Cộng hai số thập phân −5 và −7 (theo mẫu 8 bit):
1111 1011 (bù 2 của −5) + 1111 1001 (bù 2 của −7) =========== 1111 0100 (bù 2 của −12)
Quan sát thấy: khi cộng hai bit cực trái của 1111 1011 và 1111 1001, vẫn còn bit nhớ 1, nhưng bit nhớ này sẽ bị loại bỏ trong kết quả cuối cùng.
Tràn số
Xem xét trường hợp với hai số âm −6 và −4 trong hệ thập phân. Biểu diễn nhị phân bằng phương pháp bù 2 với mẫu 4 bit của hai số này lần lượt là 1010 và 1100. Giả sử chúng ta cần thực hiện phép cộng hai số này.
Tiến hành phép cộng như sau:
1010 (bù 2 của −6) + 1100 (bù 2 của −4) ====== 0110
Kết quả thu được là 0110. Khi chuyển đổi sang hệ thập phân, kết quả là số dương 6 thay vì −10 như mong đợi.
Vấn đề này được gọi là tràn số, xảy ra khi số lượng bit dùng để biểu diễn quá ít (như trong ví dụ với mẫu 4 bit). Để tìm hiểu thêm về vấn đề này, xem bài viết về tràn số.
- Công nghệ máy tính
- Ngành khoa học máy tính
- Cấu trúc máy tính
- Phương pháp bù
- Bù 1 bit
- Biểu diễn số âm trong máy tính
- Hiện tượng tràn số