Лекция_2_системы счисления
.docЛЕКЦИЯ 2
АРИФМЕТИЧЕСКИЕ И ЛОГИЧЕСКИЕ ОСНОВЫ ПОСТРОЕНИЯ ЭВМ
2.1. Системы счисления, применяемые в ЭВМ
Способ представления (записи) чисел с помощью цифровых знаков называется системой счисления. Для записи чисел в конкретной системе счисления используется некоторый конечный алфавит, состоящий из цифр а1, a2, a3, .... аn. При этом каждой цифре а1, a2, a3, .... аn в записи числа ставится в соответствие определенный количественный эквивалент (ее «вес»). Если количественное значение цифры зависит от вида этой цифры и ее позиции в записи числа, то такая система счисления называется позиционной. Благодаря наглядности представления чисел и сравнительной простоте выполнения арифметических операций в ЭВМ применяются только позиционные системы счисления.
Количество различных цифр в алфавите позиционной системы счисления называется основанием S этой системы. Любое число N в позиционной системе счисления можно представить суммой произведений целых однозначных коэффициентов аi, взятых из алфавита системы, на последовательные целые степени основания 5:
Ns = amSm + am-lSm-l + ... ... + aiSl + aoS0 + a-1S-1+a-2S-2 + ....
Сокращенная запись числа Ns имеет вид Ns = amam-1_...a1aoa-1... .
При этом позиции цифр а, в этой записи называются разрядами, причем старшие разряды, соответствующие более высоким степеням основания S, располагаются обычно слева, а младшие — справа. Цифры ai в любом i-м разряде могут принимать S различных значений, при этом всегда ai <S.
В ЭВМ применяются десятичная, двоичная, восьмеричная и шестнадцатеричная системы счисления.
Алфавит десятичной системы счисления состоит из десяти различных цифр: 0, 1, 2, .... 9. В этой системе «вес» каждого разряда в 10 раз больше «веса» предыдущего. Например, в записи 1987 цифра 1 означает число тысяч, цифра 9 — число сотен, цифра 8 — число десятков и цифра 7 — число единиц. Всякое число в десятичной системе счисления можно представить суммой различных целых степеней десяти (S = 10) с соответствующими коэффициентами ai (0, 1, 2, .... 9):
N10=am10m + am-l0m-1 + ... ... + a1101 + а0100 + a-1,10-1 + ...,
где а0, а1, ..., ат — количество единиц, десятков, сотен и т. д.; а-1, а-2, ... — количество десятых, сотых, тысячных и т. д. долей единицы.
Для физического представления (изображения) чисел необходимы элементы, способные находиться в одном из нескольких устойчивых состояний. Число этих состояний должно быть равно основанию принятой системы счисления. Тогда каждое состояние будет представлять соответствующую цифру из алфавита данной системы счисления. Наиболее простыми с точки зрения технической реализации являются так называемые двухпозиционные элементы, способные находиться в одном из двух устойчивых состояний, например: электромагнитное реле замкнуто или разомкнуто, ферромагнитная поверхность намагничена или размагничена, магнитный сердечник намагничен в одном направлении или в противоположном, транзисторный ключ находится в проводящем состоянии или запертом, и т. д. Одно из этих устойчивых состояний может представлять цифру 0, а другое — цифру 1.
Простота технической реализации двухпозиционных элементов обеспечила наибольшее распространение в ЭВМ двоичной системы счисления, основание которой S = 2; в ней используются лишь две цифры: 0 и 1. Любое действительное число в двоичной системе счисления представляется в виде суммы целых степеней основания S = 2, умноженных на соответствующие коэффициенты (0 или 1). Например, двоичное число 11011,012 = 1 • 24 + 1 • 23 + 0 • 22 + 1 • 21 + 1 • 20 +0• 2-1 + 1 • 2-2 = 16 + 8 + 2 + 1 + 0,25 = 27,2510 соответствует десятичному числу 27,2510.
Двоичное представление числа по сравнению с десятичным требует большего числа разрядов (для многоразрядного числа примерно в 3,3 раза). Тем не менее благодаря простоте двоичной арифметики и возможности использования двухпозиционных элементов двоичная система счисления является в настоящее время основной системой, применяемой в ЭВМ для представления информации, а также для выполнения арифметических и логических операций.
Кроме двоичной в ЭВМ используются также восьмеричная и шестнадцатеричная системы счисления. Основания этих систем соответствуют целым степеням числа 2 (8 = 23; 16 = 24), поэтому для них исключительно просты правила перевода в двоичную систему счисления, и наоборот. Восьмеричная и шестнадцатеричная системы счисления применяются в процессе программирования для сокращенной и удобной записи двоичных кодов команд программы.
В восьмеричной системе счисления используются восемь цифр - от 0 до 7, а любое число представляется суммой целых степеней основания S=8, умноженных на соответствующие коэффициенты ai =07. Например, десятичное число 215 записывается в восьмеричной системе счисления следующим образом:
21510=3·82+2·81 +7·80= 3278.
192 +16+7 = 215
В шестнадцатеричной системе счисления алфавит цифровых знаков состоит из 16 символов, причем в качестве первых десяти символов используются арабские цифры от 0 до 9, а дополнительно к ним применяются буквенные символы: 10—А, 11—В, 12—С, 13—D, 14—Е, 15—F. С помощью данного алфавита можно записать все десятичные числа от 0 до 15 включительно, а затем 1610 = 1 • 161 + 0• 160= 1016; 1710= 1 • 161 + 1• 160= 1116; 1810 = 1 • 161 + 2• 160= 1216 и т. д.
Число 215 в шестнадцатеричной системе счисления запишется следующим образом:
21510 =D • 161 + 7• 160= D716 (3×16 =208) + (7×1 = 7) 215
В табл. 2.1 приведены записи чисел от 0 до 20 в различных системах счисления.
Таблица 2.1 - Записи чисел от 0 до 20 в различных системах счисления
Десятичная система |
Двоичная система |
Восьмеричная система |
Шеснадцатеричная система |
|
Десятичная система |
Двоичная система |
Восьмеричная система |
Шеснадцатеричная система |
0 |
0 |
0 |
0 |
|
11 |
1011 |
13 |
B |
1 |
1 |
1 |
1 |
|
12 |
1100 |
14 |
C |
2 |
10 |
2 |
2 |
|
13 |
1101 |
15 |
D |
3 |
11 |
3 |
3 |
|
14 |
1110 |
16 |
E |
4 |
100 |
4 |
4 |
|
15 |
1111 |
17 |
F |
5 |
101 |
5 |
5 |
|
16 |
10000 |
20 |
10 |
6 |
110 |
6 |
6 |
|
17 |
10001 |
21 |
11 |
7 |
111 |
7 |
7 |
|
18 |
10010 |
22 |
12 |
8 |
1000 |
10 |
8 |
|
19 |
10011 |
23 |
13 |
9 |
1001 |
11 |
9 |
|
20 |
10100 |
24 |
14 |
10 |
1010 |
12 |
А |
|
|
|
|
|
2.2 Перевод чисел из одной системы счисления в другую
Существуют различные способы перевода чисел из одной системы счисления в другую. Рассмотрим наиболее доступный и не требующий сложных вычислений способ перевода из десятичной системы счисления в систему с новым основанием — так называемый табличный способ. Его суть заключается в том, что исходное десятичное число представляют суммой различных степеней нового основания. При этом степени подбирают из соответствующей таблицы (отсюда и название способа). Последовательность расположения степеней начинается с той, которая дает число, не превышающее исходного десятичного. Затем для членов полученного ряда степеней подбирают соответствующие коэффициенты из алфавита новой системы счисления таким образом, чтобы их сумма была равна исходному десятичному числу.
Рассмотрим примеры использования данного способа.
1. Переведем десятичное число 377 в двоичную систему счисления. Наибольшая степень нового основания S = 2, не превышающая числа 377, равна 8 (так как 28 = 256, а 29 = 512). Таким образом, последовательность расположения степеней начинается с 28 и заканчивается 20. Из этих степеней подбираем те, которые при суммировании дают результат, равный 377. Затем перед членами, которые участвовали в суммировании, поставим коэффициент 1, а которые не участвовали — 0. Окончательная запись двоичного числа состоит из этих коэффициентов:
37710=1·28 + 0·27 +1·26 +1·25 + 1·24 +1·23 +0·22 +0·21 +1·20 =
256 + 0 + 64+32 + 16 + 8 + 0 + 0
377
= 1011110012.
2. Выполним перевод этого же числа 37710 в восьмеричную систему счисления. Наибольшая степень восьми, не превышающая 377, равна 2; таким образом, последовательность степеней будет состоять из 82, 81, 80. Подбирая к ним коэффициенты из алфавита восьмеричной степени счисления (от 0 до 7), окончательно получим
37710 =5·82 + 7·81 + 1·81 = 5718
320 + 56 + 1
377
3. Выполним перевод числа 37710 в шестнадцатеричную систему счисления:
37710 = 1·162 + 7·161 + 9·160 = 17916.
256+ 112 + 9
377
4. Переведем восьмеричное число 5718 и шестнадцатеричное число 17916 в двоичную систему счисления. Для этого заменим каждую цифру этих чисел соответственно 3-разрядным или 4-разрядным двоичным числом. Отбросив при этом ненужные нули, получим
( 5 7 1 ) = 1011110012
101 111 001
( 1 7 9 ) = 1011110012
0001 0111 1001
В обоих случаях имеем одинаковый результат 5718 = 17916 = 101111012, совпадающий с результатом, полученным непосредственным переводом в двоичную систему счисления исходного десятичного числа 37710.
Табличный способ применим и при переводе правильных десятичных дробей в двоичную, восьмеричную или шестнадцатеричную систему счисления. При этом необходимо пользоваться таблицей отрицательных степеней нового основания. Проиллюстрируем примером перевода десятичной дроби 0,3125 соответственно в двоичную, восьмеричную и шестнадцатеричную системы счисления:
0,312510 = 0·2-1 + 1·2-2 + 0·2-3 + 1·2-4 = 0,01012;
0 + 0,25 + 0 + 0,0625 = 0,3125
0,312510 = 2·8-1 + 4·8-2 = 0,248
0.25 + 0,0625 = 0,3125
0,312510 = 5·16-1 = 0,516.
0,3125
5. Переводим восьмеричное число 0,248 и шестнадцатеричное 0,5!6 в двоичную систему счисления:
(0, _2_ _4_ )8 = 0,01012. (0, _5_)16 = 0,01012. 010 100 0101
В обоих случаях имеем одинаковый результат 0,248 = 0,516 = 0,01012, совпадающий с результатом, полученным непосредственным переводом в двоичную систему счисления исходной десятичной дроби 0,312510.
Рассмотрим общие правила перевода из одной позиционной системы счисления в другую.
1. Перевод целого числа из системы счисления с основанием S в другую систему с основанием q осуществляется последовательным делением его на основание q новой системы счисления до тех пор, пока не получится частное, меньшее q. Число в новой системе запишется в виде остатков деления, начиная с последнего. Указанное деление выполняется в исходной системе счисления.
Проиллюстрируем это правило примерами.
Для контроля правильности преобразований используем примеры, выполненные ранее табличным способом. Сначала переведем десятичное число 377 в двоичную систему счисления последовательным делением на основание
S = 2 новой системы:
377 2 188 2 94 2 47 2 23 2 11 2 5 2 2 2 1 2
188+1 94 + 0 47 +0 23 +1 11 +1 5 +1 2+1 1+0 0+1
1 0 0 1 1 1 1 0 1
1011110012
Аналогично выполним перевод в восьмеричную и шестнадцатеричную системы счисления:
377 8 47 : 8 5:8 377 16 23 16 1 16
47 + 1 5+7 0+5 23 + 9 1 + 7 0 + 1
1 7 5 9 7 1
5718 17916
Остатки от соответствующих делений дают записи в новых системах счисления, т. е. 37710 = 1011110012 = = 5718 = 17916. Эти результаты полностью совпадают с теми, которые были ранее получены табличным способом.
2. Перевод правильной дроби из одной позиционной системы счисления в другую осуществляется последовательным умножением ее на основание S новой системы счисления; при этом перемножаются только дробные части. Дробь в новой системе счисления записывается в виде целых частей получающихся произведений начиная с первого.
Проиллюстрируем это правило на примере перевода десятичной дроби 0,6875 в двоичную, восьмеричную и шестнадцатеричную системы счисления:
0,6875 0,3750 0,7500 0,5000
× 2 × 2 × 2 × 2
1,3750 0,7500 1,5000 1,0000
1 0 1 1
0,10112
0,6875 0,5000 0,6875
× 8 × 8 × 16
5,5000 4,0000 11,0000
5 4 В
0,548 0,В16
В шестнадцатеричной системе счисления целая часть произведения 11 запишется символом В (см. таблицу 2.1), поэтому окончательно получим 0,687510 = 0,10112 = 0,548 = 0,В16.
При переводе дробей в новую позиционную систему счисления последовательное умножение на основание этой системы выполняют до получения дробной части, равной нулю (как было в рассмотренных примерах), или до получения необходимого количества разрядов после запятой.
-
Для перевода неправильных десятичных дробей (например, 15,6875) необходимо, пользуясь приведенными правилами, выполнить отдельно перевод целой и дробной частей.
-
Обратный перевод в десятичную систему счисления из других позиционных систем выполним, пользуясь позиционной записью данного числа. Для чего представим его в виде суммы степеней своего основания, подсчитаем значения десятичных эквивалентов отдельных разрядов, а затем их просуммируем.
Покажем это на примерах:
101,012 = 1·22 + 0·21 + 1·20 + 0·2-1 + 1·2-2 = = 4 + 0+1+0 + 0,25 = 5,2510;
46,28 = 4·81 + 6·80 + 2·8-1 = 32 + 6 + 0,25 = 38,2510;
1F,A= 1·161 + 15·160+ 10·16-1 = 16+ 15 + 0,625=31,62510.
2.3 Арифметические действия в двоичной системе счисления
Особенностью двоичной системы счисления является использование простых арифметических действий, основанных на обычных правилах арифметики.
Сложение одноразрядных двоичных чисел производится по следующим правилам: 0 + 0 = 0; 0+1 = 1; 1+0=1; 1+1=0 +1 — единица переноса в старший разряд. Пользуясь этими правилами, можно выполнить сложение многоразрядных двоичных чисел подобно тому, как это делается в десятичной системе счисления. Необходимо только при этом учитывать, что 1 + 1 дает нуль в данном разряде и единицу переноса в следующий старший разряд.
Покажем это на примере сложения двоичных чисел 1100 (двенадцать) и 110 (шесть):
1100 (12)
+110 (6)
10 010 (18)
Проверим результат: 100102 = l 24 + 0 23 + 0 22 + 121+0 20 = 16+0 + 0 + 2 + 0 = 1810
Сложение трех двоичных чисел и более выполняется несколько сложнее. В этом случае нужно внимательно следить за образующимися единицами переноса в старшие разряды, так как они могут переходить не только в соседние старшие разряды, но и в более удаленные.
Вычитание двоичных чисел выполняется по следующим правилам:
0 — 0 = 0; 1—0=1; 1 — 1=0; 10 — 1 = 1. При вычитании многоразрядных двоичных чисел может возникнуть необходимость заема единицы в ближайшем старшем разряде, что дает две единицы в младшем разряде. Если в соседних старших разрядах стоят нули, то приходится занимать единицу через несколько разрядов. При этом единица, занятая в ближайшем значащем старшем разряде, дает две единицы в данном младшем разряде и единицы во всех нулевых разрядах, стоящих между данным и тем старшим разрядом, у которого брался заем. Например,
10010 (18)
- 101 (5)
1101 (13)
Проверим результат:
11012= 123 + 122 + 021 + 120= 8+ 4 + 0+ 1 = 1310
Умножение двоичных чисел выполняется по следующим правилам: 00 = 0; 01 = 0; 10 = 0; 11 = 1. Умножение многоразрядных двоичных чисел сводится к умножению множимого на каждый разряд множителя, последующему сдвигу множимого или множителя и суммированию образующихся частичных произведений. При этом каждое частичное произведение равно 0, если в соответствующем разряде множителя стоит «0», или равно множимому, сдвинутому на соответствующее число разрядов влево, если в разряде множителя стоит «1». Например,
1001 (9)
110 (6)
0000
1001
1001
110110 (54)
Проверим результат: 1101102 = 125 + 124 + 023+ 122+ 121 +02° = 32+16 + +0 + 4 + 2 + 0= 5410.
Деление двоичных чисел сводится к выполнению вычитаний и сдвигов. Используя предыдущий пример, выполним деление 110110(54) на 110 (9):
_ 110110 [110
110 1001
- 000110
- 110
000
Проверим результат:
10012 = 123+ 022 + 02l + 120 = 8 + 0 + 0 + 1= 910. т. е. 54 : 6 = 9.