
Основы алгоритмизации (ОАП) / Теория / СС
.pdf
Главная
Системы счисления
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, а именно двоичная, восьмеричная и шестнадцатеричная.
Полезно запомнить запись в этих системах счисления первых двух десятков целых чисел (табл. 1.1).
Таблица 1.1
1
Представление чисел в с/с
Десятичная |
Двоичная |
Восьмеричая с/c |
Шестнадцатиричная с/c |
с/c |
с/c |
|
|
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
2 |
10 |
2 |
2 |
3 |
11 |
3 |
3 |
4 |
100 |
4 |
4 |
5 |
101 |
5 |
5 |
6 |
110 |
6 |
6 |
7 |
111 |
7 |
7 |
8 |
1000 |
10 |
8 |
9 |
1001 |
11 |
9 |
10 |
1010 |
12 |
А |
11 |
1011 |
13 |
B |
12 |
1100 |
14 |
C |
13 |
1101 |
15 |
D |
14 |
1110 |
16 |
E |
15 |
1111 |
17 |
F |
16 |
10000 |
20 |
10 |
17 |
10001 |
21 |
11 |
Как видно из таблицы, недостатком 2 с/с является быстрый рост числа разрядов, необходимых для записи чисел. В восьмеричной и шестнадцатеричной с/c требуется соответственно в три (восьмеричная) и в четыре (шестнадцатеричная) раза меньше разрядов, чем в двоичной системе (ведь числа 8 и 16 – соответственно, третья и четвертая степени числа 2).
1.2. Перевод чисел
Перевод из 8-й и 16-й в 2-ю с/c
Для перевода достаточно каждую цифру числа заменить эквивалентной ей двоичной триадой (тройкой цифр) или тетрадой (четверкой цифр).
Пример
502(8 c/c) → ? (2 c/c)
502(8 c/c) = 101 000 010(2 c/c)
Перевод из 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)
2

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) → ? (10c/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. Выписав все найденные
цифры в обратном порядке (начиная с последнего частного), получим искомое представление числа в новой с/c.
Например, требуется 25(10 c/c) перевести в 2-ю с/c. Согласно
алгоритму, получаем 11001(2 c/c). Проверим результат:
25(10 c/c) = 11001(2 c/c) = 1 ∙ 24 + 1 ∙ 23 + 0 ∙ 22 + 0 ∙ 21 + 1 ∙ 20 = 25(10 c/c).
Перевод дробной части числа
Чтобы правильную дробь перевести из с/c с основанием r в c/c с основанием q необходимо последовательно умножать дробную часть (сначала самого числа, а потом получающихся произведений) на новое основание
с/c q до тех пор, пока: либо дробная часть получаемого произведения не станет равна нулю; либо не будет достигнута нужная точность (заданное число цифр после запятой). В новой с/c число запишется в виде последовательности целых частей получаемых произведений, начиная с первого. Важно помнить, что все действия производятся в исходной с/c.
0 3125
8
2 5000
8
4 0
Пример
0,3125(10 c/c) → ? (8 c/c)
0,3125(10 c/c) = 0,24(8 c/c)
При переводе смешанной дроби из одной с/с в другую, отдельно по своим правилам, переводится целая часть и отдельно дробная, а результаты затем приписываются друг к другу через точку.
3
1.3. Выполнение арифметических операций
При сложении необходимо помнить, в какой с/с введутся расчеты. Так, если получаем число два при сложении чисел в 2 с/с, то заменяем его на 10, т.к. цифры 2 в двоичной с/с нет. При выполнении арифметических операций в с/c с основанием r необходимо иметь соответствующие таблицы сложения и умножения. Ниже представлены таблицы сложения и умножения для r = 2:
+ |
0 |
1 |
|
|
|
0 |
1 |
1 |
1 |
1 |
10 |
× |
0 |
1 |
0 |
0 |
0 |
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 |
2 |
3 |
4 |
5 |
6 |
7 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
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 |
Таблицы сложения и умножения для 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 |
|
|||||||||||||||
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 |
|
|||||||||||
C |
|
C |
|
D |
|
E |
|
F |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
|
17 |
18 |
19 |
1A |
1B |
|
||||||||||||
D |
|
D |
|
E |
|
F |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
|
18 |
19 |
1A |
1B |
1C |
|
|||||||||||||
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 |
|
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
× |
|
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 |
|
0 |
1 |
2 |
3 |
4 |
5 |
|
6 |
|
7 |
|
8 |
9 |
|
|
A |
B |
C |
D |
E |
F |
|
4
2 |
0 |
2 |
4 |
6 |
8 |
A |
C |
E |
10 |
12 |
14 |
16 |
18 |
1A |
1C |
1E |
3 |
0 |
3 |
6 |
9 |
C |
F |
12 |
15 |
18 |
1B |
1E |
21 |
24 |
27 |
2A |
2D |
4 |
0 |
4 |
8 |
C |
10 |
14 |
18 |
1C |
20 |
24 |
28 |
2C |
30 |
34 |
38 |
3C |
5 |
0 |
5 |
A |
F |
14 |
19 |
1E |
23 |
28 |
2D |
32 |
37 |
3C |
41 |
46 |
4B |
6 |
0 |
6 |
C |
12 |
18 |
1E |
24 |
2A |
30 |
36 |
3C |
42 |
48 |
4E |
54 |
5A |
7 |
0 |
7 |
E |
15 |
1C |
23 |
2A |
31 |
38 |
3F |
46 |
4D |
54 |
5B |
62 |
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 |
0 |
A |
14 |
1E |
28 |
32 |
3C |
46 |
50 |
5A |
64 |
6E |
78 |
82 |
8C |
96 |
B |
0 |
B |
16 |
21 |
2C |
37 |
42 |
4D |
58 |
63 |
6E |
79 |
84 |
8F |
9A |
A5 |
C |
0 |
C |
18 |
24 |
30 |
3C |
48 |
54 |
60 |
6C |
78 |
84 |
90 |
9C |
A8 |
B4 |
D |
0 |
D |
1A |
27 |
34 |
41 |
4E |
5B |
68 |
75 |
82 |
8F |
9C |
A9 |
B6 |
C3 |
E |
0 |
E |
1C |
2A |
38 |
46 |
54 |
62 |
70 |
7E |
8C |
9A |
A8 |
B6 |
C4 |
D2 |
F |
0 |
F |
1E |
2D |
3C |
4B |
5A |
69 |
78 |
87 |
96 |
A5 |
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)
1.4.Коды чисел
Вцелях упрощения выполнения арифметических операций в компьютерных системах применяют специальные коды для представления чисел. Использование кодов позволяет свести операцию вычитания чисел к арифметическому сложению кодов этих чисел. Применяются прямой, обратный и дополнительный коды чисел.
Прямой код используется для представления отрицательных чисел, а также при умножении и делении. Обратный и дополнительный коды используются для замены операции вычитания операцией сложения, что упрощает устройство арифметического блока. К кодам выдвигаются следующие требования:
1)разряды числа в коде жестко связаны с определенной разрядной сеткой;
2)для записи кода знака в разрядной сетке отводится фиксированный, строго определенный разряд.
Например, если за основу представления кода взят один байт, то для представления числа будет отведено 7 разрядов, а для записи кода знака один разряд.
Прямой код двоичного числа совпадает по изображению с записью самого числа. Значение знакового разряда для положительных чисел равно 0, а для отрицательных чисел 1.
Знаковым разрядом обычно является крайний разряд в разрядной сетке. В дальнейшем при записи кода знаковый разряд от цифровых условимся отделять
5

запятой. Если количество разрядов кода не указано, будем предполагать, что под запись кода выделен один байт.
Обратный код для положительного числа совпадает с прямым кодом. Для отрицательного числа все цифры числа заменяются на противоположные (1 на 0, 0 на 1), а в знаковый разряд заносится единица.
Дополнительный код положительного числа совпадает с прямым кодом. Для отрицательного числа дополнительный код образуется путем получения обратного кода и добавлением к младшему разряду единицы.
Пример Для числа +1101:
прямой код |
обратный код |
дополнительный код |
Для числа – |
0,0001101 |
0,0001101 |
0,0001101 |
1101: |
|
|||
прямой код |
обратный код |
дополнительный код |
|
1,0001101 |
1,1110010 |
1,1110011 |
|
Особенности сложения чисел в обратном и дополнительном кодах
При сложении чисел в дополнительном коде возникающая единица переноса в знаковом разряде отбрасывается. При сложении чисел в обратном коде возникающая единица переноса в знаковом разряде прибавляется к младшему разряду суммы кодов. Если результат арифметических действий является кодом отрицательного числа, необходимо преобразовать его в прямой код. При этом обратный код преобразуется в прямой заменой цифр во всех разрядах, кроме знакового на противоположные. Дополнительный код преобразуется в прямой так же, как и обратный, с последующим прибавлением единицы к младшему разряду.
Пример
Сложим двоичные числа X и Y в обратном и дополнительном кодах. Если X= – 101,Y= –11, то пользуясь правилами двоичной арифметики получим
X= –101
Y= –110
X + Y = –1011
Сложим числа, используя коды.
Прямой код |
Сложение в обратном |
Сложение в |
||||
коде |
дополнительном коде |
|||||
|
||||||
|
|
|
|
|
||
Xпр = |
|
|
|
|
||
Xобр = 1,1111010 |
Xдоп = 1,1111011 |
|||||
1,0000101 |
Yобр = 1,1111001 |
Yдоп = 1,1111010 |
||||
Yпр = |
1 1,1110011 |
отбрасывается |
1 ) 1,1110101 |
|||
|
|
+1 |
|
|||
1,0000110 |
|
|
|
|
||
|
|
|
|
|
||
|
(X + Y)обр = 1,1110100 |
(X + Y)доп = 1,1110101 |
||||
|
|
|
|
|
|
6