ФАКУЛЬТАТИВ Системы счисления.
Система счисления (СС) – совокупность приёмов и правил для изображения чисел с помощью символов, имеющих определённые количественные значения. В любой системе счисления выделяют некоторые числа, которые называют узловыми; другие числа – алгоритмические, получаются в результате выполнения каких-либо операций над узловыми. Например, в римской системе счисления узловыми являются числа I(1), V(5), X(10), L(50), C(100), D(500), M(1000). Алгоритмическими числами являются, например, числа II, III, IV, VI, VII, VIII, IX, LX(60), CXXI(121). Если в римской СС меньшее узловое число стоит слева от другого узлового числа, то оно вычитается, а если справа – то прибавляется к соседнему. Например, XII = 10+2; XIX= X + IX = 10+9; XL = 50 - 10 = 40 и т.д. Существуют алфавитные СС, в которых для записи чисел используются буквы. Например, в церковно-славянском языке для записи чисел используются буквы: А(1), В(2), Г(3), Д(4), Е(5), S(6), I (10), К(20). Тогда, например, IД = 14, КЕ = 25. Системы счисления делятся на позиционные и непозиционные. В непозиционных системах счисления количественное значение каждой цифры не зависит от её позиции в записи числа. Непозиционные СС возникли раньше позиционных систем. Римская СС является непозиционной: например, в записи чисел XV и VII значение символа V (5) не зависит от его позиции в записи чисел. Если значение числового символа зависит от его расположения в записи числа, то такая СС называется позиционной. Её изобретение, приписываемое шумерам и вавилонянам, имело неоценимые последствия в истории человеческой цивилизации. Дальнейшим развитием позиционной системы занимались индусы. Позиционные системы более удобны для вычислений, чем непозиционные. В настоящее время используются в основном позиционные системы счисления.
К числу таких систем относится современная десятичная система счисления, возникновение которой связано со счётом на пальцах. В средневековой Европе она появилась благодаря итальянским купцам, которые в свою очередь заимствовали её у мусульман. «Позиционность» десятичной системы поясним на примере. В записи числа 525.351 цифра 5 встречается три раза, и её значение зависит от позиции в записи. Первая позиция слева - это количество сотен (500), третья слева - это количество единиц (5), а вторая после десятичной точки - это количество сотых долей (5/100) или (5*10-2). Любая позиционная СС характеризуется своим основанием – количеством знаков, используемых для изображения чисел. Для нас привычной является десятичная система счисления с основанием 10. В ней для записи чисел используются десять различных цифр: {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}. Основание позиционной СС не обязательно равно 10, а может быть любым натуральным числом большим 1. Например, если СС имеет основание 3, то используются три цифры {0,1, 2}, а числа могут записываться в виде 2113, 102.213 – нижний индекс указывает на основание СС, в которой сделана запись числа. Далее будем обозначать 2-ую, 8-ую и 16-ую СС как Bin, Oct и Hex соответственно. Десятичную систему счисления обозначим как Dec. Приведём общее правило для изображения чисел в позиционной системе счисления. Пусть задано основание системы счисления – натуральное число B >1. Задан алфавит (цифры) системы счисления, содержащий В символов. Пусть M ={A1, A2, …, AB} - алфавит системы счисления; а Rk – знаки алфавита M, k = -n, -n +1, …. 0, 1, 2, … m, где m, n - неотрицательные целые числа. Здесь индекс k указывает на позицию в записи числа, в которой стоит знак Rk. Позиционной записью числа Х в системе счисления с основанием В называется его представление в виде:
Х = Rm Rm-1 Rm-2… R1 R0 • R -1 R -2 … R-n (9.1)
В формуле (9.1) символ «•» - разделитель целой и дробной части числа X; обычно это точка «.» или запятая «,». Номер позиции цифры в записи числа определяется относительно разделителя: влево или вправо. Отсчёт влево идёт с нуля. В формуле (9.1) R4 означает, что эта цифра находится на 5-ой позиции, если считать от разделителя влево (5, а не 4, так как отсчёт идет с нуля); R-3 означает, что эта цифра стоит на третьей позиции, если считать от разделителя вправо.
Запись (9.1) означает, что число X равно: X= Rm*Bm + Rm-1*Bm-1 + Rm-2*Bm-2 +… R1*B1 +R0* B0+R –1*B-1 +R-2*B-2 +… R –n * B-n, где B0=1; Bm = B*B*…..B, т.е. В умножаем на себя m - раз; B-n = 1/Bn. Более компактная запись формулы (9.1): m X = ∑ Rk ∗ Bk . (9.2) k =− n Например, для «обычной» десятичной системы счисления с основанием В=10 и М={0,1,2,3,4,5,6,7,8,9}, запись (9.1) для X= 3269.721 означает, что Х=3*103 + 2*102 + 6*101 + 9*100 + 7*10-1 + 2*10-2 + 1*10-3. Основание позиционной СС – это количество единиц младшего разряда, переходящее в единицу старшего соседнего разряда. Используя это правило, выпишем первые 16 натуральных чисел в двоичной системе счисления (Bin), используя «таблицу сложения» 1+0 = 1; 1+1 = 10:
В 8-ой СС (Oct) используются первые восемь цифр десятичной системы {0, 1, 2, 3, 4, 5, 6, 7}. Выполняются соотношения
В Hex используются десять цифр 0, 1, … 9, а недостающие цифры изображают с помощью букв A, B, C, D, E, F: A= 9+1, B=A+1, C=B+1, D=C+1, E=D+1, F=E+1, F+1=1016. В сводной таблице 1 представлены натуральные числа от 1 до 16 в 2- ой, 8-ой и 16-ой системах счисления. Обратите внимание на то, что в таблице для записи двоичного представления чисел всегда используются 4 бита, хотя для записи чисел от 1 до 7 достаточно 1, 2 или 3 бит. Такое 4-х битовое представление нам понадобится в дальнейшем при переводе чисел из Bin в Hex, и наоборот. Таблица 1.
Пример 1. Приведём пример позиционной записи (1) для чисел в Bin. Рассмотрим двоичное число: 11100101.101 Это дробное число; для его перевода в Dec надо использовать формулу (9.2): 27 + 26 + 25 + 22 + 20 + 1/2 + 1/23 = 128 + 64 + 32 + 4 + 1 + 0.5 +0.125 = 229. 625. Таким образом, формула (2) даёт способ перевода чисел из Bin в Dec. Пример 2. Перевести из Bin в Dec число 101.011. Запишем данное число в виде (9.2): 101.011 = 1*22 + 0*21 + 1*20 +0*2-1 + 1*2-2 + 1*2-3=4+0+1+1/2 +1/4=4.75 Алгоритм перевод чисел из Dec в Bin поясним на примерах. Пример 2. Перевести из Dec в Bin число 42.73 Отдельно переведем целую и дробную части числа. a) Для перевода целой части (= 42) проводим ряд последовательных делений десятичного числа 42 на 2. При каждом таком делении находим частное (r) и остаток (q). На каждом шаге полученное частное вновь делим на 2 и т.д. Процесс останавливается, когда при очередном делении частное будет равно 0. 42: 2 = 21 (0) r = 21, q = 0 21: 2 = 10 (1) r = 10, q = 1 10: 2 = 5 (0) r = 5, q = 0 5: 2 = 2 (1) r = 2, q = 1 2: 2 = 1 (0) r = 1, q = 0 1: 2 = 0 (1) r = 0, q = 1 (Stop) Полученные остатки q выписываем, начиная с самого последнего и до первого. Это и будет двоичный код числа 42: 4210 =1010102. b) Для перевода дробной части 0.73 заданного десятичного числа в Bin проводим ряд последовательных умножений на 2. В полученном произведении на каждом шаге отделяем целую часть (r) от дробной (q). Дробную часть вновь умножаем на 2 и т.д. Процесс заканчивается, если на очередном шаге дробная часть будет равна нулю. Здесь возможны случаи, при которых очередная дробная часть q уже встречалась на предыдущих шагах процесса, то есть мы получим периодическую двоичную дробь. Если такой момент не наступает, мы имеем дело с бесконечной двоичной дробью. Выписываем полученные целые части r в порядке их появления от первой до последней - это и будет искомая двоичная дробь. 0. 73 * 2 = 1. (46) r =1, q= 0.46 0. 46 * 2 = 0. (92) r =0, q= 0.92 0. 92 * 2 = 1. (84) r =1, q= 0.84 0. 84 * 2 = 1. (68) r =1, q= 0.68 0. 68 * 2 = 1. (36) r =1, q= 0.36 и т.д. Мы прервали перевод дроби 0.73 и получили её приближенное представление в виде дроби системы Bin: 0. 73 º 0.10111… Окончательно получаем: 42.73 º 101010.10111… Пример 2.
Записать в Bin десятичное число 0.15 (в виде двоичной дроби). 0.15 * 2 = 0. (3) r = 0, q = 0.3 0.3 * 2 = 0. (6) r = 0, q = 0.6 0.6 * 2 = 1. (2) r = 1, q = 0.2 0.2 * 2 = 0. (4) r = 0, q = 0.4 0.4 * 2 = 0. (8) r = 0, q = 0.8 0.8 * 2 = 1. (6) r = 1, q = 0.6 0.6 * 2 = 1. (2) r = 1, q = 0.2 – повторение: см. строку 3. Получили представление числа 0.15 в виде двоичной периодической дроби: 0.15 = 0.00100110011001…= 0.00(1001). Пример 3. Если знаменатель дроби является степенью двойки, то можно использовать следующий приём для перевода дроби из Dec в Bin. Покажем, как можно записать в двоичной системе дроби 3/4, 5/8, 13/16: 3 = 112, 4 = 1002 → 3/4 = (11/100)2 = 0.11; 5 = 1012, 8 =10002 → 5/8 = (101/1000)2 = 0.101; 13 = 11012, 16 = 100002 → 13/16 = (1101/10000)2 = 0.1101 Техника перевода чисел из Hex в Dec такая же, как и в случае перевода из Bin в Dec. Пример 4. Задано дробное число 3FA.B5 в Hex. Записать это число в Dec. Используем формулу (9.2): 3FA.B5 = 3*162 +F*161 +A*160 + B*16-1 + 5*16-2 = 3*256 + 15*16 +10 + 11/16 +5/256 =768+240+10+(11*16+5)/256=1018 +181/256 º1018.70703125… Пример 5. Перевести десятичное число 332 в Hex. Как и при переводе из Dec в Bin делим заданное целое на 16 и при каждом таком делении находим частное (r) и остаток (q). Полученное частное вновь делим на 2 и т.д. Если остаток 10§ q § 15, то заменяем его на соответствующие буквенные изображения цифр Hex, см таблицу 1. Затем выписываем остатки по порядку «снизу – вверх»: 332: 16 = 20 (12), 12 это С16 20: 16 = 1 (4) 1: 16 = 0 (1) (Stop) 33210 = 14С16. Дробные числа из Dec переводятся в Hex, как и в случае перевода из Dec в Bin. Например, переведём дробь 0.13 в Hex: 0.13*16 = (2). 08 0.08*16 = (1). 28 0.28*16 = (4). 48 0.48*16 = (7). 68 0.68*16 = (A). 88, A16=10 0.88*16 = (E). 08, E = 14, остаток 08 уже встречался, см. 2 строку. Т.е. при переводе числа 0.13 в Hex мы получили периодическую дробь: 0.13 = 0.2147AE147AE… = 0.2(147AE)16. При переводе дробей, знаменатель которых является степенью 16, можно использовать более простой способ. Например, переведём дробь 11/16 в Hex: 11=B16, 16=1016; тогда (11/16) = (B/10)16 = 0.B; переведём дробь 167/256 в Hex: 167 = A716; 256 = 10016; значит (167/256) = (A7/100) = 0.A7. Для перевода чисел из Bin в Hex применяется следующий приём: двоичную запись числа надо разбить на группы цифр по 4 (на тетрады), начиная от разделителя влево и вправо (если число дробное). Самую левую и самую правую тетрады дополняем, если надо, нулями. Каждую двоичную тетраду нужно заменить на соответствующую цифру в Hex, используя таблицу 1. Пример: 111011001.110111 = 1 1101 1001. 1101 11 = 000 1 1101 1001. 1101 11 00 = 1D9. DC. Перевод из Hex в Bin осуществляется ещё проще: каждую цифру числа, записанного в Hex, нужно заменить на соответствующую тетраду из таблицы 1. Например, A7C.2F = 1010 0111 1100. 0010 1111; Значение систем Bin и Hex для информатики определяется тем, что все данные и программы представлены в компьютере в двоичной системе. Для большей «читабельности» двоичных кодов их выводят на экран в Hex; адреса памяти записываются в Hex; дампы памяти представляют в Hex.
Для записи чисел в компьютере используются два основных способа:
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|