Một cột có thể tạo bit nhớ
Số nhị phân chỉ dùng chữ số 0 và 1. Cộng từ **phải sang trái**: `0+0=0`, `0+1=1`, `1+0=1`, còn `1+1=10₂` (viết 0 ở cột đang cộng và **nhớ 1** sang cột bên trái). Nếu một cột có thêm bit nhớ, cộng cả bit đó.
Ví dụ `1010₂ + 101₂`: viết `101₂` thành `0101₂` để thẳng cột. Từ phải qua trái được các bit `1`, `1`, `1`, `1`; kết quả `1111₂`. Kiểm lại theo hệ mười: `1010₂=10`, `101₂=5`, tổng bằng 15, đúng với `1111₂`.
Bộ cộng nửa: hai đầu vào, hai đầu ra
Khi chỉ cộng **hai bit** `x`, `y` và **chưa có bit nhớ đi vào**, có bốn trường hợp:
| x | y | Tổng nhị phân | Bit nhớ z | Bit kết quả t |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 | 1 |
| 1 | 0 | 1 | 0 | 1 |
| 1 | 1 | 10₂ | 1 | 0 |
So với bảng chân trị, **bit nhớ `z = x AND y`**, còn **bit kết quả `t = x XOR y`**. Đó là ý tưởng của **bộ cộng nửa**. Nếu đã có bit nhớ từ cột bên phải đi vào, cần xử lí thêm đầu vào ấy; không dùng riêng bảng hai đầu vào này cho cả phép cộng nhiều cột.
Thử `1001₂ + 1011₂`: cột phải `1+1` viết 0 nhớ 1; cột tiếp `0+1+1` viết 0 nhớ 1; cột tiếp `0+0+1` viết 1; cột trái `1+1` viết 0 nhớ 1 ra ngoài. Kết quả là **`10100₂`** (9+11=20).
Bài luyện
Khi cộng hai bit x=1, y=1 và chưa có bit nhớ đi vào, đầu ra của bộ cộng nửa là gì?
1+1=10₂ nên có bit nhớ 1.
1+1=10₂: bit nhớ là 1, bit ở cột hiện tại là 0.
Tổng 10₂ không có bit kết quả 1 ở cột hiện tại.
Không thể bỏ bit nhớ của 1+1.
Lời giải
Vì 1+1=10₂, bộ cộng nửa đưa 0 làm bit kết quả t và 1 làm bit nhớ z. Điều này khớp t=1 XOR 1=0, z=1 AND 1=1.
Bài luyện
Kết quả của 1010₂ + 101₂ là gì?
1011₂ là 11, chưa bằng 10+5.
1110₂ là 14, thiếu 1.
1010₂=10 và 101₂=5 nên tổng 15=1111₂.
10100₂ là 20.
Lời giải
Viết thẳng cột 1010₂+0101₂=1111₂. Kiểm theo hệ mười: 10+5=15.
Bài luyện
Vì sao không dùng riêng một bộ cộng nửa để cộng cột đang có bit nhớ từ cột phải chuyển sang?
Cột ấy có ba bit cần tính: x, y và bit nhớ đi vào.
XOR xử lí được cả 0 và 1.
Ví dụ 1+1 đã tạo bit nhớ.
Bit nhớ xuất hiện khi cộng nhị phân.
Lời giải
Bảng bộ cộng nửa có hai đầu vào x,y. Khi cột đang cộng còn nhận một bit nhớ từ bên phải, cần tính cả đầu vào thứ ba.
Đang học