Mục lục bài họcĐang ở d01-b2
Binary arithmetic, two's complement and overflow
Adding in binary
Four rules only: $0+0=0$; $0+1=1$; $1+1=10$ (write $0$, carry $1$); $1+1+1=11$ (write $1$, carry $1$). Work right to left exactly as in denary. The carry is the only place mistakes happen, so write it above the column.
Representing negative numbers: two's complement
To make $-n$ in $8$ bits: write $n$ in binary, flip every bit, then add one. So $-45$: $45$ is $00101101$, flipped is $11010010$, plus one is $11010011$. The leftmost bit now acts as a sign: $0$ means positive, $1$ means negative.
Why two's complement and not sign-and-magnitude
Because subtraction becomes addition: $a - b$ is just $a + (-b)$, so the processor needs only an adder. There is also only one representation of zero, whereas sign-and-magnitude has both $+0$ and $-0$.
Overflow
An $8$-bit signed register holds $-128$ to $+127$. If a calculation lands outside that range the result wraps round and is simply wrong — $100 + 50$ gives $-106$. Overflow is detected when adding two numbers of the same sign produces a result of the opposite sign.
Cộng trong hệ nhị phân
Chỉ có bốn quy tắc: $0+0=0$; $0+1=1$; $1+1=10$ (viết $0$, nhớ $1$); $1+1+1=11$ (viết $1$, nhớ $1$). Làm từ phải sang trái y như hệ thập phân. Chỗ duy nhất hay sai là số nhớ, nên hãy viết nó lên trên cột.
Biểu diễn số âm: bù hai
Muốn tạo $-n$ trong $8$ bit: viết $n$ ở hệ nhị phân, đảo mọi bit, rồi cộng một. Ví dụ $-45$: $45$ là $00101101$, đảo thành $11010010$, cộng một thành $11010011$. Bit trái ngoài cùng bây giờ đóng vai dấu: $0$ là dương, $1$ là âm.
Vì sao dùng bù hai chứ không dùng dấu-và-độ lớn
Vì phép trừ trở thành phép cộng: $a - b$ chính là $a + (-b)$, nên bộ xử lý chỉ cần một mạch cộng. Ngoài ra bù hai chỉ có MỘT cách biểu diễn số không, trong khi dấu-và-độ lớn có cả $+0$ lẫn $-0$.
Tràn số
Thanh ghi $8$ bit có dấu chứa được từ $-128$ tới $+127$. Nếu phép tính rơi ra ngoài khoảng đó thì kết quả bị cuộn vòng và đơn giản là sai — $100 + 50$ ra $-106$. Nhận biết tràn số: cộng hai số CÙNG dấu mà ra kết quả TRÁI dấu.
Dùng thanh ghi $8$ bit có dấu.
(a) Tính $53 - 45$ bằng cách cộng bù hai. (b) Tính $100 + 50$ và giải thích kết quả.
(a) Bước 1 — viết hai số. $53 = 00110101$; $45 = 00101101$.
(a) Bước 2 — tạo $-45$. Đảo bit: $11010010$; cộng một: $11010011$.
(a) Bước 3 — cộng. $00110101 + 11010011 = 1\,00001000$. Bit nhớ thứ chín bị bỏ đi vì thanh ghi chỉ $8$ bit, còn lại $00001000 = 8$ ✓ đúng bằng $53-45$.
(b) Bước 1 — cộng. $100 = 01100100$; $50 = 00110010$. Tổng nhị phân là $10010110$.
(b) Bước 2 — đọc kết quả. Bit dấu là $1$ nên đây là số âm. Giá trị: đảo bit được $01101001$, cộng một được $01101010 = 106$, nên kết quả là $-106$.
(b) Bước 3 — giải thích. Đã xảy ra tràn số: cộng hai số dương mà ra kết quả âm. Nguyên nhân là $150$ vượt quá $+127$ — giá trị lớn nhất mà $8$ bit có dấu biểu diễn được.
Đọc xong rồi — làm thử ngay
Bài tập của chương Data Representation: Number Bases, Binary Arithmetic and Character Sets gồm 14 câu trắc nghiệm và 3 đề tự luận. Đáp án hiện ngay khi chọn, miễn phí.