Mục lục bài họcĐang ở d01-b2
← A-Level Computer Science
0/30 bài đã học xong
Chương 1 · Data Representation: Number Bases, Binary Arithmetic and Character Sets · Bài 2/3 của chương · bài 2/30 của A-Level Computer Science

Binary arithmetic, two's complement and overflow

Phép tính nhị phân, bù hai và tràn số
← Mục lục bài học
Lý thuyết · English

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.

Giải thích tiếng Việt

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.

Ví dụ — trừ bằng bù hai và phát hiện tràn số

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ả.

Giải.

(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.

Bẫy hay mất điểm — Đảo bit rồi quên cộng một, hoặc cộng một trước rồi mới đảo. Thứ tự bắt buộc là ĐẢO rồi CỘNG MỘT. Cách kiểm rẻ nhất: cộng số vừa tạo với số gốc, phải ra $00000000$ (bỏ bit nhớ tràn) — vì $n + (-n) = 0$.
Phải nhớ — Bù hai biến trừ thành cộng, đó là lý do nó tồn tại. Nhớ khoảng $-128$ tới $+127$ cho $8$ bit, và dấu hiệu tràn số là cộng hai số cùng dấu ra kết quả trái dấu.

Đọ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í.

Làm bài tập chương →