[<>] ~~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}}