2.6: Деталь - Цілочисельні коди
- Page ID
- 29852
Існує багато способів представлення цілих чисел як бітових шаблонів. Всі страждають від неможливості представляти довільно великі цілі числа у фіксованій кількості бітів. Обчислення, яке виробляє результат поза діапазоном, як кажуть, переповнюється.
Найбільш часто використовуваними зображеннями є двійковий код для цілих чисел без знаку (наприклад, адреси пам'яті), доповнення 2 для цілих знаків (наприклад, звичайна арифметика) та двійковий сірий код для приладів вимірювання змінних величин.
У наступній таблиці наведено п'ять прикладів 4-розрядних цілочисельних кодів. MSB (найбільш значний біт) знаходиться зліва, а LSB (найменш значний біт) праворуч.
| \(\overbrace{\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\quad}^{\text{Unsigned Integers}}\) | \(\overbrace{\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad}^{\text{Signed Integers}}\) | ||||
| Двійковий код | Двійковий сірий код | 2 доповнення | Знак/Величина | 1 доповнення | |
| \(\text{Range}\rightarrow\) | [0, 15] | [0, 15] | [-8, 7] | [-7, 7] | [-7, 7] |
| -8 | 1000 | ||||
| -7 | 1001 | 1111 | 1000 | ||
| -6 | 1010 | 1110 | 1001 | ||
| -5 | 1011 | 1101 | 1010 | ||
| -4 | 1100 | 1100 | 1011 | ||
| -3 | 1101 | 1011 | 1100 | ||
| -2 | 1110 | 1010 | 1101 | ||
| -1 | 1111 | 1001 | 1110 | ||
| 0 | 0000 | 0000 | 0000 | 0000 | 0000 |
| 1 | 0001 | 0001 | 0001 | 0001 | 0001 |
| 2 | 0010 | 0011 | 0010 | 0010 | 0010 |
| 3 | 0011 | 0010 | 0011 | 0011 | 0011 |
| 4 | 0100 | 0110 | 0100 | 0100 | 0100 |
| 5 | 0101 | 0111 | 0101 | 0101 | 0101 |
| 6 | 0110 | 0101 | 0110 | 0110 | 0110 |
| 7 | 0111 | 0100 | 0111 | 0111 | 0111 |
| 8 | 1000 | 1100 | |||
| 9 | 1001 | 1101 | |||
| 10 | 1010 | 1111 | |||
| 11 | 1011 | 1110 | |||
| 12 | 1100 | 1010 | |||
| 13 | 1101 | 1011 | |||
| 14 | 1110 | 1001 | |||
| 15 | 1111 | 1000 | |||
Двійковий код
Цей код призначений для цілих невід'ємних чисел. Для коду довжини\(n\) 2\(^n\) шаблони представляють цілі числа від 0 до 2\(^n\) − 1. LSB (найменш значущий біт) дорівнює 0 для парних і 1 для непарних цілих чисел.
Двійковий сірий код
Цей код призначений для цілих невід'ємних чисел. Для коду довжини\(n\) 2\(^n\) шаблони представляють цілі числа від 0 до 2\(^n\) −1. Два бітові шаблони суміжних цілих чисел відрізняються рівно на один біт. Ця властивість робить код корисним для датчиків, де кодується ціле число може змінюватися під час вимірювання. Наступна анонімна данина з'явилася в колонці Мартіна Гарднера «Математичні ігри» в Scientific American, серпень 1972 року, але насправді була відома набагато раніше.
Бінарний сірий код весело, f
або з ним ДИВНІ РЕЧІ можна зробити...
П'ятнадцять, як відомо, один ой ой ой,
в той час як десять один один один.
2 доповнення
Цей код призначений для цілих чисел, як позитивних, так і негативних. Для коду довжини\(n\) 2\(^n\) шаблони представляють цілі числа від −2\(^{n−1}\) до 2\(^{n−1}\) −1. LSB (найменш значущий біт) дорівнює 0 для парних і 1 для непарних цілих чисел. Там, де вони перекриваються, цей код збігається з двійковим кодом. Цей код широко використовується.
Знак/Величина
Цей код призначений для цілих чисел, як позитивних, так і негативних. Для коду довжини\(n\) 2\(^n\) шаблони представляють цілі числа − (2\(^{n−1}\) − 1) через 2\(^{n−1}\) − 1. MSB (найбільш значущий біт) дорівнює 0 для додатних і 1 для від'ємних цілих чисел; інші біти несуть величину. Там, де вони перекриваються, цей код збігається з двійковим кодом. Хоча концептуально простий, цей код незручний на практиці. Його окремі уявлення для +0 та -0 взагалі не корисні.
1 доповнення
Цей код призначений для цілих чисел, як позитивних, так і негативних. Для коду довжини\(n\) 2\(^n\) шаблони представляють цілі числа − (2\(^{n−1}\) − 1) через 2\(^{n−1}\) − 1. MSB дорівнює 0 для натуральних чисел; від'ємні цілі числа утворюються шляхом доповнення кожного біта відповідного натурального цілого числа. Там, де вони перекриваються, цей код збігається з двійковим кодом. Цей код незручний і рідко використовується сьогодні. Його окремі уявлення для +0 та -0 взагалі не корисні.
