[<>]
~~TOC wide~~
{{anchor:appendix_d}}
====== Приложение Д. Системы представления чисел ======
Страницы 352–359
FIXME
{{anchor:d2}}
===== Двоичная, восьмеричная и шестнадцатеричная системы счисления =====
Независимо от системы счисления, число всегда может рассматриваться в качество полинома "по B", где B — основание. Более того, основание определяет общее количество цифр, используемых для написания чисел.
Следовательно abcd с основанием B может быть интерпретировано следующим образом:
\\ abcd = d * B0 + c * B1 + b * B2 + a * B3
\\ Значение цифр a, b, c и d находится между 0 и B-1.
|<80% 20% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 5% 20%>|
^ Система ^ Используемые цифры |||||||||||||||^ Основание ^
|Двоичная | 0 | 1 | | | | | | | | | | | | | | | 2 |
|Восьмеричная | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | | | | | | | | | 8 |
|Десятичная | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | | | | | | | 10 |
|Шестнадцатеричная| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | 16 |
| | | | | | | | | | | | | | | | | | |
|Десятичное значение цифр| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | |
В шестнадцатеричной системе не хватает 6 символов, необходимых для представления чисел со значением от 10 до 15, поэтому используются буквы от A до F.
__//Примечание//__: \\ Во всех системах последовательные степени основания записываются следующим образом: 1, 10, 100, 1000, 10000, …
{{anchor:d3}}
===== Преобразования =====
- Преобразование из любой системы в десятичную.
Преобразуемое число первоначально переводиться в полином:
|100112|= 1*20| + 1*21| + 0*22| + 0*23| + 1*24|
| |= 1| + 2| + 0| + 0| + 16|
|:::|= 1910|||||
| ||||||
|1AF16|= F*160|+F*161|+F*162| ||
| |= F|+A*16|+256| ||
|:::|= 43110|||||
- Преобразование из десятичной в другую систему. Пусть B является основанием, к которому должно быть приведено число N1, записанное в десятичном виде.
Преобразование осуществляется следующим образом:
* Вычисляется R1 = N1 MOD B \\ N2 = N1\B
* Если N2 = 0, преобразование заканчивается. \\ Если N2 > 0, таким же образом вычисляются R2 и N3. \\ Полученная последовательность R1, R2, R3, … соответствует цифрам числа с основанием B.
__//Пример 1//__: записать 19 в двоичном виде:
|<30% 20% 80%>|
|R1|= 19 MOD 2 = 1|
|N2|= 19\2 = 9|
|R2|= 9 MOD 2 = 1|
|N3|= 9\2 = 4|
|R3|= 4 MOD 2 = 0|
|N4|= 4\2 = 2|
|R4|= 2 MOD 2 = 0|
|N5|= 2\2 = 1|
|R5|= 1 MOD 2 = 1|
|N6|= 1\2 = 0|
|1910|= 100112|
__//Пример 2//__: записать 234 в шестнадцатеричном виде:
|<30% 20% 80%>|
|R1|= 234 MOD 16 = 10 → A|
|N2|= 234\16 = 14|
|R2|= 14 MOD 16 = 14 → E|
|N3|= 14\16 = 0|
|23410|= EA16|
- Преобразование "двоичная/шестнадцатеричная"
Преобразование между любыми двумя системами может осуществляться через посредство десятичной. Сначала преобразование идёт в соответствии с п.1, а затем — п.2.
Преобразование между двоичной и шестнадцатеричной системами может осуществляться быстрее:
__//Пример 1//__: записать 1000111112 в шестнадцатеричном виде
Двоичное число делиться на группы из 4 цифр каждая, начиная справа. Затем отдельные группы прямо преобразуются в шестнадцатеричные цифры.
|<30% 30% 30% 30%>|
| 1 | 0001 | 1111 |
| 1 | 1 | F |
|1000111112 = 11F16|||
__//Пример 2//__: записать 11F16 в двоичном виде
Каждая шестнадцатеричная цифра переводиться в двоичную с добавлением необходимых нулей для получения групп из 4 двоичных цифр.
|<30% 30% 30% 30%>|
| 1 | 1 | F |
| 0001 | 0001 | 1111 |
|11F16 = 000100011111 = 1000111112|||
{{anchor:d4}}
===== Представление в памяти целых чисел =====
Итак, все числа должны быть записаны в электронной памяти компьютера в двоичном виде. Однако, существуют различия между "математическим" двоичным представлением, которое только что было объяснено, и компьютерным:
* Математические целые числа могут быть любого размера, в то время, как размер чисел, хранимых в реальном компьютере, из практических соображений должен быть ограничен.
* Для представления отрицательных чисел в математике перед числом просто ставиться знак минус. В памяти компьютера элементы могут представлять только 0 и 1. Поэтому для представления знака числа необходим специальный приём.
Элемент, способный представлять 0 и 1 называется битом.
Компьютерная память распределена на группы по восемь битов, называемые байтами. Компьютер может обратиться к содержимому любого байта в памяти по определённому "адресу".
Из практических соображений целое число храниться в двух байтах, что даёт 65536 различных конфигураций:
00000000 00000000 = 0
00000000 00000001 = 1
00000000 00000010 = 2
00000000 00000011 = 3
─────────────────────────
11111111 11111111 = 65536
На первый взгляд кажется, что два байта позволяют представить целые числа от 0 до 65536. Но на компьютере первый бит зарезервирован для //знака// числа: если первый бит — 0, число положительное; если же оно отрицательное, то первый бит — 1.
Следующие конфигурации битов представляют положительные числа:
00000000 00000000 = 0
00000000 00000001 = 1
─────────────────────────
01111111 11111111 = 32767
Кажется вполне естественным, что для образования отрицательных чисел в памяти компьютера достаточно заменить первый бит вышеуказанных конфигураций на 1 (обратите внимание, что в этом случае будут два представления нуля). Однако реально всё осуществляется несколько сложнее. Компьютер работает с представлением целого числа следующим образом:
* Он начинает с конфигурации битов в "положительной форме".
* Затем он инвертирует каждый бит (1 становиться 0, 0 становиться 1).
* К младшему биту добавляется 1; игнорируется возможность переноса в старший бит.
__//Пример 1//__: представление -1
00000000 00000001 = + 1
11111111 11111110 все биты инвертированы
11111111 11111111 к младшему биту добавлена 1 (переноса нет)
В памяти компьютера -1 имеет то же двоичное представление, что и 65536 в математике. Поэтому -1 считается двоичным представлением 65536.
__//Пример 2//__: представление -32767
01111111 11111111 = 32767
10000000 00000000 инвертированные биты
10000000 00000001 добавлена 1
Таким образом, в двух байтах возможно представление следующих чисел:
00000000 00000000 = 0
00000000 00000001 = 1
──────────────────────────
01111111 11111111 = 32767
11111111 11111111 = -1
11111111 11111110 = -2
──────────────────────────
10000000 00000001 = -32767
10000000 00000000 = -32768
Итак, мы получили представление чисел от -32768 до +32767, т.е. всего 65535 различных значений.
Зачем нужно такое сложное представление?
На практике такое представление чисел с использованием дополнительного кода предоставляет два преимущества:
- Одно представление нуля (+0 и -0 записываются в виде 16–ти нулевых битов).
- Операция состоящая в получении двоичного дополнительного кода обратима. Для понимания того, что представляет 11111111 11111111, заметьте, что в первом бите 1 (следовательно представление отрицательное). Затем вычислите дополнительный код, который будет равен 00000000 00000001. Представлена -1.
- Не требует специальных схем вычитания:
Для вычитания используется схема получения дополнительного кода и схема сложения.
__//Пример 1//__: как компьютер получает результат операции 256 - 8
256 = 00000001 00000000
8 = 00000000 00001000
Двоичный дополнительный код этой конфигурации:
-8 = 11111111 11111000
Компьютер получает сумму:
00000001 00000000
+ 11111111 11111000
─────────────────────────
00000000 11111000 = 248
__//Пример 2//__: вычисление 8 - 256
8 = 00000000 00001000
256 = 00000001 00000000
-256 = 11111111 00000000
00000000 00001000
+ 11111111 00000000
─────────────────────────
11111111 00001000
Для получения значения этого отрицательного числа вычисляется его дополнительный код, который равен
00000000 11111000 = 248
В результате вычитания действительно получается -248.
----
[<>]
{{tag>MSX Book_msxbrm}}