Лекция 1. СИСТЕМЫ СЧИСЛЕНИЯ И КОДЫ ЧИСЕЛ 1.1. Понятие системы счисления Системы счисления (c/c) делятся на позиционные и непозиционные. В непозиционных системах вес цифры (т.е. тот вклад, который она вносит в значение числа) не зависит от ее позиции в записи числа. Так, в римской системе счисления в числе ХХХII (тридцать два) вес цифры Х в любой позиции равен десяти. В позиционных системах счисления вес каждой цифры изменяется в зависимости от ее положения (позиции) в последовательности цифр, изображающих число. Например, в числе 757,7 первая семерка означает 7 сотен, вторая – 7 единиц, а третья – 7 десятых долей единицы. Сама же запись числа 757,7 означает сокращенную запись выражения 700 + 50 + 7 + 0,7 = 7 · 102 + 5 · 101 + 7 ·100 + 7 · 10–1 = 757,7. Основание позиционной c/c – это количество различных знаков или символов, используемых для изображения цифр в данной системе. За основание системы можно принять любое натуральное число. Следовательно, возможно бесчисленное множество позиционных систем: двоичная, троичная, четверичная и т.д. Запись чисел в каждой из систем счисления с основанием q означает сокращенную запись выражения an–1 · qn –1 + an–2 · qn –2+ ... + a1 · q1 + a0 · q0 + a–1 · q–1 + ... + a–m · q–m, где n и m – число целых и дробных разрядов соответственно. Основание с/с соответствует количеству цифр (знаков), используемых для записи чисел в этой с/с. Например, основание десятичной с/с есть число 10, и только десять цифр (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) используются при записи чисел в этой с/с. В двоичной с/с используются две цифры – 0 и 1, в шестнадцатеричной – 16, причем для чисел 10, 11, 12, 13, 14, 15 в этой с/с введены дополнительные цифры (знаки) – A, B, C, D, E, F соответственно, т.к. традиционно используемых цифр недостаточно. Основание 10 не слишком удобно (в цепях электрических схем необходимо для этого иметь 10 различных сигналов). С технической точки зрения, чем меньше сигналов в схеме, тем лучше. Наименьшее основание, которое может быть у позиционной с/с – это 2. Поэтому двоичная с/с широко используется в современной вычислительной технике, в устройствах автоматики и связи. Кроме десятичной с/с для «общения с компьютером» широко используются системы с основанием, являющимся целой степенью числа 2, а именно двоичная, восьмеричная и шестнадцатеричная. 4 Полезно запомнить запись в этих системах счисления первых двух десятков целых чисел (табл. 1.1). Таблица 1.1 Представление чисел в с/с Десятичная с/c 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 Двоичная с/c 0 1 10 11 100 101 110 111 1000 1001 1010 1011 1100 1101 1110 1111 10000 10001 Восьмеричая с/c Шестнадцатиричная с/c 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 10 8 11 9 12 А 13 B 14 C 15 D 16 E 17 F 20 10 21 11 Как видно из таблицы, недостатком двоичной с/с является быстрый рост числа разрядов, необходимых для записи чисел. В восьмеричной и шестнадцатеричной с/c требуется соответственно в три (восьмеричная) и в четыре (шестнадцатеричная) раза меньше разрядов, чем в двоичной системе (ведь числа 8 и 16 – третья и четвертая степени числа 2 соответственно). 1.2. Перевод чисел Перевод из 8 с/c и 16 с/c в 2 с/c Для перевода достаточно каждую цифру числа заменить эквивалентной ей двоичной триадой (тройкой цифр) или тетрадой (четверкой цифр). Пример 502(8 c/c) → ? (2 c/c) 502(8 c/c) = 101 000 010(2 c/c) 5 Перевод из 2 с/c в 8 с/с и 16 с/с Для перевода нужно разбить число влево и вправо от последнего разряда (или запятой) на триады или тетрады и каждую такую группу заменить соответствующей восьмеричной или шестнадцатеричной цифрой. В случае необходимости неполные триады дополняются нулями. Пример 1111110(2 c/c) → ? (8 c/c) 1 111 110(2 c/c) = 001 111 110(2 c/c) = 176(8 c/c) 1111010101,1100(2 c/c) → ? (16 c/c) 0011 1101 0101, 1100(2 c/c) = 3D5,C(16 c/c) Перевод из произвольной в 10 с/с, и наоборот Пусть имеется с/с с основанием k и некоторое число a1 ... an в этой с/с, где a1, …, an – цифры этого числа. Данное число можно представить в виде a1 · kn –1 + a2 · kn – 2 + … + an · k0. Пример 110011(2 c/c) → ? (10 c/c) 110011(2 c/c) = 1 · 10101 + 1 · 10100 + 0 · 1011 + 0 · 1010 + 1 · 101 + + 1 · 100(2 c/c) = 1 · 25 + 1 · 24 + 0 · 23 + 0 · 22 + 1 · 21 + 1 · 20(10 c/c) = = 32 + 16 + 2 + 1 = 51(10 c/c) 1216,04(8 c/c) → ? (10 c/c) 1216,04(8 c/c) = 1 · 83 + 2 · 82 + 1 · 81 + 6 · 80 + 4 · 8–2 = 512 + 128 + 8 + + 6 + 0,0625 = 654,0625(10 c/c) Перевод из 10 с/c в произвольную Данный алгоритм является обратным к алгоритму, рассмотренному выше. Исходное число делится на основание с/с, в которую требуется перевести число. Первый шаг: разделить исходное число на r (основание новой с/c), зафиксировать остаток от деления (число от 0 до r – 1) и частное. Второй шаг: если частное больше r, то снова разделить его на r, продолжая фиксировать остаток от деления. Процесс деления частных продолжать до тех пор, пока частное не станет меньше r. Третий шаг: все полученные в процессе деления остатки от деления и последнее частное будут образовывать цифры исходного числа в с/с с основанием r. Выписав все найденные цифры в об25 2 ратном порядке (начиная с последнего частного) по24 12 2 лучим искомое представление числа в новой с/c. 1 12 6 2 Например, требуется 25(10 c/c) перевести в 2 с/c. 0 6 3 2 Согласно алгоритму получаем 11001(2 c/c). 0 2 1 Проверим результат: 25(10 c/c) = 11001(2 c/c) = 1 · 24 + 1 + 1 · 23 + 0 · 22 + 0 · 21 + 1 · 20 = 25(10 c/c). 6 Перевод дробной части числа Чтобы правильную дробь перевести из с/c с основанием r в c/c с основанием q необходимо последовательно умножать дробную часть (сначала самого числа, а потом получающихся произведений) на новое основание с/c q до тех пор, пока: либо дробная часть получаемого произведения не станет равна нулю; либо не будет достигнута нужная точность (заданное число цифр после запятой). В новой с/c число запишется в виде последовательности целых частей получаемых произведений, начиная с первого. Важно помнить, что 0 3125 все действия производятся в исходной с/c. 8 При переводе смешанной дроби из одной с/с в другую 2 5000 отдельно по своим правилам переводится целая часть и 8 отдельно дробная, а результаты затем приписываются друг 4 0 к другу через точку. Например, требуется перевести 0,3125(10 c/c) в 8 с/с. Согласно алгоритму перевода получаем: 0,3125(10 c/c) = 0,24(8 c/c). 1.3. Выполнение арифметических операций При сложении необходимо помнить, в какой с/с введутся расчеты. Так, если получаем число два при сложении чисел в 2 с/с, то заменяем его на 10, т.к. цифры 2 в двоичной с/с нет. При выполнении арифметических операций в с/c с основанием r необходимо иметь соответствующие таблицы сложения и умножения. Ниже представлены таблицы сложения и умножения для r = 2. + 0 1 0 0 1 × 1 1 10 0 0 0 0 1 1 0 1 Далее приведены таблицы сложения и умножения для r = 8. + 0 1 2 3 4 5 6 7 0 0 1 2 3 4 5 6 7 1 1 2 3 4 5 6 7 10 2 2 3 4 5 6 7 10 11 3 3 4 5 6 7 10 11 12 4 4 5 6 7 10 11 12 13 5 5 6 7 10 11 12 13 14 6 6 7 10 11 12 13 14 15 7 7 10 11 12 13 14 15 16 × 0 1 0 1 2 3 4 5 6 7 0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 2 0 2 4 6 10 12 14 16 3 0 3 6 11 14 17 22 25 4 0 4 10 14 20 24 30 34 5 0 5 12 17 24 31 36 43 6 0 6 14 22 30 36 44 52 7 0 7 16 25 34 43 52 61 7 Таблицы сложения и умножения для r = 16 будут выглядеть следующим образом. + 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 0 1 2 3 4 5 6 7 8 9 A B C D E F 1 1 2 3 4 5 6 7 8 9 A B C D E F 10 2 2 3 4 5 6 7 8 9 A B C D E F 10 11 3 3 4 5 6 7 8 9 A B C D E F 10 11 12 4 4 5 6 7 8 9 A B C D E F 10 11 12 13 × 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 0 0 0 0 1 2 3 4 2 4 6 8 3 6 9 C 4 8 C 10 5 A F 14 6 C 12 18 7 E 15 1C 8 10 18 20 9 12 1B 24 A 14 1E 28 B 16 21 2C C 18 24 30 D 1A 27 34 E 1C 2A 38 F 1E 2D 3C 5 5 6 7 8 9 A B C D E F 10 11 12 13 14 6 6 7 8 9 A B C D E F 10 11 12 13 14 15 7 7 8 9 A B C D E F 10 11 12 13 14 15 16 8 8 9 A B C D E F 10 11 12 13 14 15 16 17 9 9 A B C D E F 10 11 12 13 14 15 16 17 18 A A B C D E F 10 11 12 13 14 15 16 17 18 19 B B C D E F 10 11 12 13 14 15 16 17 18 19 1A 5 6 7 0 0 0 5 6 7 A C E F 12 15 14 18 1C 19 1E 23 1E 24 2A 23 2A 31 28 30 38 2D 36 3F 32 3C 46 37 42 4D 3C 48 54 41 4E 5B 46 54 62 4B 5A 69 8 0 8 10 18 20 28 30 38 40 48 50 58 60 68 70 78 9 0 9 12 1B 24 2D 36 3F 48 51 5A 63 6C 75 7E 87 A B 0 0 A B 14 16 1E 21 28 2C 32 37 3C 42 46 4D 50 58 5A 63 64 6E 6E 79 78 84 82 8F 8C 9A 96 A5 C C D E F 10 11 12 13 14 15 16 17 18 19 1A 1B E E F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D F F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E C D E F 0 0 0 0 C D E F 18 1A 1C 1E 24 27 2A 2D 30 34 38 3C 3C 41 46 4B 48 4E 54 5A 54 5B 62 69 60 68 70 78 6C 75 7E 87 78 82 8C 96 84 8F 9A A5 90 9C A8 B4 9C A9 B6 C3 A8 B6 C4 D2 B4 C3 D2 E1 Пример 10000000100(2 c/c) + 111000010(2 c/c) = 10111000110(2 c/c) 3B3,6(16 c/c) + 38B,4(16 c/c) = 73E,A(16 c/c) 1510,2(8 c/c) – 1230,54(8 c/c) = 257,44(8 c/c) 100111(2 c/c) × 1000111(2 c/c) = 101011010001(2 c/c) 1170,64(8 c/c) × 46,3(8 c/c) = 57334,134(8 c/c) 8 D D E F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1.4. Коды чисел В целях упрощения выполнения арифметических операций в компьютерных системах применяют специальные коды для представления чисел. Использование кодов позволяет свести операцию вычитания чисел к арифметическому сложению кодов этих чисел. Применяются прямой, обратный и дополнительный коды чисел. Прямой код используется для представления отрицательных чисел, а также при умножении и делении. Обратный и дополнительный коды используются для замены операции вычитания операцией сложения, что упрощает устройство арифметического блока. К кодам выдвигаются следующие требования: 1) разряды числа в коде жестко связаны с определенной разрядной сеткой; 2) для записи кода знака в разрядной сетке отводится фиксированный, строго определенный разряд. Например, если за основу представления кода взят один байт, то для представления числа будет отведено 7 разрядов, а для записи кода знака – один разряд. Прямой код двоичного числа совпадает по изображению с записью самого числа. Значение знакового разряда для положительных чисел равно 0, а для отрицательных чисел – 1. Знаковым разрядом обычно является крайний разряд в разрядной сетке. В дальнейшем при записи кода знаковый разряд от цифровых условимся отделять запятой. Если количество разрядов кода не указано, будем предполагать, что под запись кода выделен один байт. Обратный код для положительного числа совпадает с прямым кодом. Для отрицательного числа все цифры числа заменяются на противоположные (1 на 0, 0 на 1), а в знаковый разряд заносится единица. Дополнительный код положительного числа совпадает с прямым кодом. Для отрицательного числа дополнительный код образуется путем получения обратного кода и добавлением к младшему разряду единицы. Пример Для числа +1101: прямой код обратный код дополнительный код 0,0001101 0,0001101 0,0001101 Для числа –1101: прямой код обратный код дополнительный код 1,0001101 1,1110010 1,1110011 9 Особенности сложения чисел в обратном и дополнительном кодах При сложении чисел в дополнительном коде возникающая единица переноса в знаковом разряде отбрасывается. При сложении чисел в обратном коде возникающая единица переноса в знаковом разряде прибавляется к младшему разряду суммы кодов. Если результат арифметических действий является кодом отрицательного числа, необходимо преобразовать его в прямой код. При этом обратный код преобразуется в прямой заменой цифр во всех разрядах, кроме знакового, на противоположные. Дополнительный код преобразуется в прямой так же, как и обратный, с последующим прибавлением единицы к младшему разряду. Пример Сложим двоичные числа X и Y в обратном и дополнительном кодах. Если X = –101, Y = –11, по правилами двоичной арифметики получим: X = –101; Y = –110; X + Y = –1011. Сложим числа, используя коды. Сложение Сложение Прямой код в обратном коде в дополнительном коде Xпр = 1,0000101 Yпр = 1,0000110 1.5. Практические задания 1. Перевести числа в десятичную систему счисления: 29A,5(16 с/c), 1216,04(8 c/c). 2. Перевести числа из десятичной системы счисления в двоичную: а) 464(10 c/c); б) 380,1875(10 c/c); в) 115,94(10 c/c) (получить пять знаков после запятой в двоичном представлении). 3. Записать число в прямом, обратном и дополнительном кодах: а) 11010; б) –11101; в) –101001; г) –1001110. 4. Перевести X и Y в прямой, обратный и дополнительный коды. Сложить их в обратном и дополнительном кодах. Результат перевести в прямой код. Проверить полученный результат, пользуясь правилами двоичной арифметики. а) X = –11010; Y = 1001111; г) X = –10110 Y = –111011; б) X = –11101; Y = –100110; д) X = 1111011; Y = –1001010; в) X = 1110100; Y = –101101; е) X = –11011; Y = –10101. 10