Toán học nhị phân và số nguyên có dấu
Đã giới thiệu| English | Ý nghĩa |
|---|---|
| overflow/ˌəʊvəˈfləʊ/ | Vượt quá |
| two's complement/tuːz ˈkɒmplɪmənt/ | Bù hai |
| register/ˈredʒɪstə/ | Thanh ghi |
| sign bit/saɪn bɪt/ | Bit dấu |
| most significant bit/məʊst sɪɡˈnɪfɪkənt bɪt/ | Bit quan trọng nhất |
| one's complement/wʌnz ˈkɒmplɪmənt/ | bù mã |
| Binary Coded Decimal/ˈbaɪnəri ˈkəʊdɪd ˈdesɪml/ | mã thập phân nhị phân |
Ngân hàng đã mất một ngày
- Vào ngày 1 tháng 9 năm 1983, chỉ số sàn giao dịch Vancouver ở mức 524.811. Nó đã mở cửa ở mức 1000 cách đây 22 tháng và thị trường đã tăng trong suốt thời gian đó.
- Chương trình tính lại chỉ số sau mỗi giao dịch, cắt cụt thay vì làm tròn mỗi lần. Mỗi lần cắt cụt mất đi một phần nhỏ của điểm số. Ba nghìn giao dịch mỗi ngày đã hoàn thành công việc còn sót lại.
- Khi được tính toán đúng cách, chỉ số là 1098.892: chính phép toán, chứ không phải thị trường, đã làm giảm một nửa nó.
- Phép toán trên một số lượng bit cố định không giống với phép toán bạn đã học ở trường. Bài học này về cộng nhị phân, quá tải, phép trừ bằng bù hai, số nguyên có dấu và BCD.
Cộng nhị phân
- Cộng từng cột từ phải sang trái, mang vào cột kế tiếp, y hệt như trong thập phân.
- Các quy tắc: $0 + 0 = 0$; $0 + 1 = 1$; $1 + 1 = 10$, viết 0 và mang 1; $1 + 1 + 1 = 11$, viết 1 và mang 1.
0101$+$0011$=$1000, tức là $5 + 3 = 8$.

Phương pháp tương tự như thập phân, chỉ có hai chữ số để mang giữa các cột
Nhị phân & số nguyên có dấu
byte = tổng các giá trị vị trí
Xem cách một mẫu hình 8 bit ánh xạ sang một số (và nó sẽ tràn vượt quá 255 như thế nào).
Cộng các số nhị phân 0101 + 0011. Cho kết quả 4 bit.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
$5 + 3 = 8$, tức là 1000 trong nhị phân.
Quá tải
- Quá tải xảy ra khi kết quả của phép tính cần nhiều bit hơn thanh ghi có thể chứa. Bit carry ra khỏi cột quan trọng nhất bị mất, nên đáp án lưu trữ sẽ sai.
- Đây là đặc tính của độ rộng thanh ghi, không phải của con số 255: trong một thanh ghi 16 bit, tổng cùng loại sẽ hợp lệ.
- Trong phép toán có dấu, dấu hiệu nhận biết là bit dấu bị đảo ngược sai: hai số dương tạo ra số âm, hoặc hai số âm tạo ra số dương.
Tràn溢出 trong phép cộng nhị phân có nghĩa là:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Tràn溢出 xảy ra khi tổng quá lớn để vừa trong số bit có sẵn; bit carry đi ra khỏi cột bên trái bị mất.
Ví dụ minh họa: gọi tên quá tải đúng cách
- Cộng các số nguyên không dấu 8-bit
10110101và01101100và nhận xét về kết quả. - Tổng là
1 0010 0001, cần 9 bit. Kết quả thực tế là 289. - Đáp án đầy đủ: đã xảy ra quá tải, vì 289 lớn hơn giá trị lớn nhất mà một thanh ghi 8-bit có thể chứa, là 255; bit carry ra khỏi bit quan trọng nhất bị mất, nên kết quả lưu trữ
0010 0001là 33, điều này sai. - Điểm số dành cho việc xác định độ rộng thanh ghi và nói rằng kết quả không thể biểu diễn trong đó. Chỉ nói "Đáp án lớn hơn 255" thì không đạt điểm.
Hai số nguyên không âm 8 bit được cộng lại và kết quả cần 9 bit. Giải thích nào đạt điểm tối đa?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Nêu độ rộng thanh ghi, nói rằng kết quả không thể biểu diễn trong đó, và mô tả những gì xảy ra với bit carry. Các phương án khác chỉ nêu triệu chứng mà không nêu nguyên nhân.
Phép trừ bằng bù hai
- Để tính $A - B$: lập bù hai của $B$ bằng cách đảo ngược mọi bit và cộng 1, cộng nó vào $A$, sau đó loại bỏ bất kỳ bit carry nào ở cuối.
- $100 - 30$ trong 8 bit: phần bù hai của
0001 1110là1110 0001đảo ngược, cộng thêm 1, kết quả là1110 0010. 0110 0100$+$1110 0010$=$1 0100 0110; loại bỏ 1 ở đầu và đọc0100 0110$= 70$. ✓

Phép trừ trở thành phép cộng, đó là lý do tại sao bộ xử lý không cần mạch trừ
Giá trị bù hai 4-bit của 0011 là gì? (đảo ngược, sau đó cộng 1)
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Đảo ngược 0011 → 1100, sau đó cộng 1 → 1101 (biểu thị $-3$).
Sắp xếp các bước trừ B từ A bằng phương pháp bù hai theo thứ tự.
Difficulty 3/5 · 200 coins + a small bonus on first completion today
Đảo ngược, cộng một, cộng, loại bỏ. Việc loại bỏ là yếu tố giữ cho đáp án nằm trong độ rộng của thanh ghi.
Số nguyên có dấu bù hai
- Trong một số bù hai $n$-bit, bit quan trọng nhất là bit dấu: 0 nghĩa là dương, 1 nghĩa là âm. Tương đương, bit trên cùng mang giá trị vị trí âm, là $-2^{n-1}$.
- Để đọc một số âm: đảo ngược mọi bit, cộng 1, rồi đặt dấu trừ phía trước.
1011 0100đảo ngược thành0100 1011, cộng 1 được0100 1100$= 76$, nên giá trị là $-76$. Kiểm tra bằng giá trị vị trí: $-128 + 32 + 16 + 4 = -76$. ✓ - Đối với $n$ bit, phạm vi là từ $-2^{n-1}$ đến $+2^{n-1} - 1$: 8 bit cho phạm vi từ $-128$ đến $+127$, 12 bit cho phạm vi từ $-2048$ đến $+2047$. Giá trị âm nhất bắt đầu bằng 1 theo sau là zeros; giá trị dương nhất bắt đầu bằng 0 theo sau là ones.

11111111 là 255 nếu đọc theo cách này và −1 nếu đọc theo cách kia
Các bit có dấu bù hai
Bit bên trái mang giá trị vị trí âm. Đảo ngược bất kỳ bit nào — hoặc nhấn Negate (đảo ngược mọi bit, sau đó cộng 1) — và quan sát sự thay đổi của giá trị có dấu.
Đọc số có dấu bù hai 8 bit 11111101 dưới dạng giá trị thập phân có dấu.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
MSB là 1 (âm). Đảo ngược → 00000010, cộng 1 → 00000011 $= 3$, nên giá trị là $-3$.
Giá trị dương lớn nhất mà một số có dấu bù hai 8 bit có thể chứa là bao nhiêu?
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Phạm vi là $-2^{7}$ đến $2^{7}-1$, tức là $-128$ đến $+127$. Giá trị cực đại là 01111111 = 127.
Ví dụ minh họa: viết −108 trong 12 bit
- Bắt đầu từ $+108$ trong 12 bit: $108 = 64 + 32 + 8 + 4$, nên
0000 0110 1100. - Đảo ngược mọi bit:
1111 1001 0011. Cộng 1:1111 1001 0100. - Kiểm tra bằng các giá trị vị trí, nơi bit trên cùng có giá trị $-2048$: $-2048 + 1024 + 512 + 256 + 128 + 16 + 4 = -108$. ✓
- Lỗi phổ biến nhất là dấu và độ lớn: đặt bit trên cùng là 1 và giữ nguyên phần còn lại. Đó là một sơ đồ khác, cũ hơn và không đạt điểm ở đây.
Viết −108 dưới dạng số bù hai 12 bit (cho phép dùng khoảng trắng).
Difficulty 1/5 · 100 coins + a small bonus on first completion today
+108 là 0000 0110 1100; đảo ngược thành 1111 1001 0011 và cộng 1. Kiểm tra: −2048 + 1024 + 512 + 256 + 128 + 16 + 4 = −108.
Bù một
- Bù một là sơ đồ cũ hơn: một số âm được tạo ra bằng cách đảo ngược mọi bit của số dương, không có bước cộng 1. $+30$ là
0001 1110, nên $-30$ là1110 0001. - Nhược điểm của nó là có hai số không,
0000 0000và1111 1111, điều này lãng phí một mẫu mã và làm phức tạp phép tính toán. - Biểu diễn bù hai có một số không và cho phép cùng một mạch cộng thực hiện cả phép trừ, đó là lý do nó chiến thắng.
Bù một được ưu tiên hơn bù hai vì nó chỉ có một biểu diễn của số không.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Ngược lại: bù một có hai số không, +0 và −0. Bù hai có một, và cho phép bộ cộng thực hiện phép trừ.
Mã hóa nhị phân thập phân
- Trong Mã hóa nhị phân thập phân (BCD), mỗi chữ số thập phân được lưu trữ dưới dạng mẫu 4-bit riêng của nó, sử dụng chỉ
0000đến1001. - 93 trong BCD là
1001 0011, điều này không giống với 93 trong nhị phân thuần túy,0101 1101. Đọc cái này như cái kia là bẫy đề thi yêu thích. - Ứng dụng: máy tính bỏ túi, đồng hồ kỹ thuật số và mảng hiển thị bảy đoạn, nơi mỗi chữ số được điều khiển riêng biệt, và tiền tệ, nơi BCD tránh các lỗi làm tròn khi lưu trữ $0.1$ trong nhị phân thuần túy. Chi phí là các mẫu bị lãng phí, vì
1010đến1111không bao giờ được sử dụng.

Một chữ số, một nibble, một màn hình hiển thị
Viết chữ số thập phân $9$ dưới dạng mẫu hình BCD 4 bit.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
$9$ là 1001. Trong BCD, mỗi chữ số thập phân được gán một nibble riêng (0000–1001).
Ghép nối mỗi mẫu hình bit với điều nó đại diện.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Không có gì trong các bit chỉ rõ cách đọc chúng. Quy ước biểu diễn đã thống nhất sẽ quyết định giá trị.
Điểm số dễ mất
- Giải thích hiện tượng tràn bằng cách sử dụng chiều rộng thanh ghi mà đề bài đã cho, không phải bằng câu "nó lớn hơn 255".
- Để lấy số đối, đảo ngược và cộng thêm 1. Việc đặt bit đầu tiên là 1 thuộc về phương pháp dấu và độ lớn, một cơ chế khác.
- Phép trừ theo bổ sung hai kết thúc bằng việc loại bỏ bit carry cuối cùng. Giữ lại nó sẽ cho ra kết quả gồm chín bit.
- BCD lưu trữ từng chữ số riêng biệt; nhị phân thuần túy lưu trữ toàn bộ số.
1001 0011là 93 trong BCD và 147 trong nhị phân.
Bạn đã nắm vững
- Cộng từng cột với các bit carry; tràn là khi kết quả cần nhiều bit hơn thanh ghi có thể chứa, và đáp án chỉ ra chiều rộng đó
- Trừ đi bằng cách cộng bổ sung hai, đảo ngược và cộng thêm 1, sau đó loại bỏ bit carry cuối cùng
- Dấu (signed): MSB là bit dấu và mang $-2^{n-1}$; phạm vi từ $-2^{n-1}$ đến $+2^{n-1}-1$; đọc một số âm bằng cách đảo ngược, cộng 1 và đổi dấu.
- Biểu diễn bù một chỉ đảo ngược và có hai số không; BCD lưu trữ mỗi chữ số thập phân trong nibble riêng của nó, dùng cho đồng hồ, máy tính bỏ túi và tiền tệ