Арифметические основы вычислительных машин

 
Арифметические основы вычислительных машин

Системы счисления

Двоичное представление чисел

Все компьютеры используют для хранения информации двоичную систему. Это значит, что каждый элемент хранимой информации может иметь только два состояния. Эти состояния обозначаются как «включен» и «выключен», «истина» и «ложь», или «1» и «0». Как правило, компьютер использует эти значения в виде уровней напряжения.

Из-за двоичного представления данных компьютеры используют в своих вычислениях арифметику с двоичным основанием. Используя простейшие числа 0 и 1, можно выполнять очень сложные вычисления.

Арифметика с основанием 2 пользуется только двумя цифрами: 0 и 1.

Для начала определим общие принципы систем счисления на примере привычной нам десятичной арифметики. Мы обычно применяем систему исчисления по основанию 10. В десятичной арифметике употребляется десять различных цифр - от 0 до 9. (Двоичную арифметику можно представить себе как систему для людей, имеющих только два пальца.) Ограничение лишь десятью цифрами в десятичной арифметике не мешает нам представлять более крупные числа. Мы пользуемся многозначными числами, в каждой позиции которых стоят разные степени 10. Самая правая цифра любого числа обозначает число единиц, соседняя слева - количество десятков, следующая - число сотен и т.д. Прогрессия справа налево выстраивается такая:

100, 101, 102 и т.д.

Число 2368 в действительности представляет 2 тысячи, 3 сотни, 6 десятков и 8 единиц. Покажем, говоря математическим языком, разложение числа 2368.

2368 =  2*103 + 3*102 + 6*101 + 8*100

  =  2000 + 300 + 60 + 8

Таким образом, мы видим общее правило определения веса разряда многоразрядного числа:

Если пронумеровать разряды целого числа  справа налево, начиная от 0 для разряда единиц, то вес любого разряда получается возведением основания системы счисления в  степень,  значение  которой равно  номеру  разряда.

Так, вес самого младшего разряда целых чисел равен 1,  поскольку номер разряда равен 0 (любое число, возведенное в нулевую степень, дает в результате  единицу). Вес следующего слева разряда равен 10 в степени 1, т.е.  равен десяти, и т.д.

Арифметика с основанием 2 или двоичная система аналогична десятичной, за исключением того, что разряды числа здесь соответствуют степеням 2 а не 10. Числа больше 1 представляются многозначными числами, так же как в десятичной арифметике многозначное представление получают числа больше 9. Каждая цифра (разряд) в двоичной системе называется бит (от Binary digit). Двоичным числом состоящим из n бит можно изобразить число величиной 2n-1.

Кроме бита введем понятие байта – байт (англ. byte) — единица измерения количества информации, байт равен восьми битам (может принимать 256 (28) различных значений).

Сложение в двоичной системе выглядит так:

0 + 0 = 0

1 + 0 = 1

1 + 1 = 10

В цифровой электронике одному двоичному разряду в двоичной системе счисления соответствует один двоичный логический элемент с двумя состояниями (открыт, закрыт).

Чтобы было сразу понятно, что число записано в двоичном представлении, мы будем пользоваться суффиксом «b» (т.е. буква b будет записана после всех цифр). Этим они будут отличаться от десятичных, не имеющих суффикса. Например, 2368 - это десятичное число, а 1011b  - двоичное.

К неудобствам  двоичной системы счисления относится то, что запись числа в двоичной системе громоздка (требует большего числа разрядов, чем привычная для человека десятичная). По этой и ряду других причин,  кроме двоичной применяется шестнадцатеричная система счисления. Преобразования из двоичной в шестнадцатеричную систему и обратно выполняются просто и удобно.

Двоичная арифметика хороша для компьютера, поскольку он имеет дело только с единицами и нулями. Но человеческое восприятие требует более компактного представления. Мы будем пользоваться шестнадцатеричным представлением данных для собственного удобства.

Шестнадцатеричное представление чисел

Шестнадцатеричное представление чисел – это система исчисления по основанию 16. Каждая цифра в числе может иметь значение от 0 до 15. Каждый разряд в числе является степенью 16. Шестнадцатеричное представление – удобный метод записи двоичной информации. Каждая шестнадцатеричная цифра соответствует четырем битам. Для преобразования двоичного числа в шестнадцатеричное представление разбейте его на группы по 4 бита и прочитайте каждую группу как шестнадцатеричную цифру. Это дает уплотнение записи один к четырем – очень удобно. Такая группа из четырех разрядов называется тетрадой. Чтобы отличать число в шестнадцатеричном представлении будем дописывать суффикс «h».

Небольшая трудность здесь связанна с тем, что у нас имеются цифры только от 0 до 9. Числа от 10 до 15 мы будем представлять первыми шестью буквами латинского алфавита: от A до F.

 

Таблица 1. Системы счисления

Десятичная (Dec) 

Двоичная (Bin)

Шестнадцатеричная (Hex)

0

0

0

1

1

1

2

01

2

3

11

3

4

100

4

5

101

5

6

110

6

7

111

7

8

1000

8

9

1001

9

10

1010

A

11

1011

B

12

1100

C

13

1101

D

14

1110

E

15

1111

F

16

10000

10


 

Перевод целых чисел из одной системы счисления в другую

Поскольку в практической деятельности люди привыкли  оперировать десятичной системой счисления,  а в ЭВМ числа представляются в двоичной,  необходимо научиться преобразовывать числа  из одной системы счисления в другую.

Перевод в десятичную систему из двоичной или шестнадцатеричной

Перевод в десятичную систему числа x, записанного в q-ичной cистеме счисления (q = 2 или 16) сводится к вычислению значения многочлена

x = an*qn + an-1*qn-1   +   ...   +  a0*q0

средствами десятичной арифметики. Для выполнения преобразования полезно иметь перед глазами таблицу со степенями двойки (разрядов двоичной системы счисления).

n

0

1

2

3

4

5

6

7

8

9

10

2n

1

2

4

8

16

32

64

128

256

512

1024


Также приведем четыре младших разряда шестнадцатеричной системы

n

0

1

2

3

16n

1

16

256

4096


А теперь приведем примеры преобразования:

Примеры преобразования из двоичной системы в десятичную.

5 4 3 2 1 0


110011b=1*25 + 1*24 + 0*23 + 0*22 + 1*21 + 1*20=51

9 8 7 6 5 4 3 2 1 0

1111101000b = 1*29 + 1*28 +·1*27 + ·1*26 + 1*25 + 0*24 + 1*23 +0*22 + 0*21 +1*20 = 1000

Пример преобразования из шестнадцатеричной системы в десятичную.

3 2 1 0

2C6Eh= 2*163 + C*162 + 6*162·+ E*162

=2·4096+12·256+6·16+14·1=11374

Перевод целых чисел из десятичной системы в двоичную или шестнадцатеричную

Для перевода целого десятичного числа  N  в систему счисления с основанием  q  необходимо  N  разделить с остатком (нацело) на q, записанное в той же десятичной системе. Затем неполное частное, полученное от такого деления, нужно снова разделить с остатком на q, и т.д., пока последнее полученное неполное частное не станет равным нулю. Представлением числа N  в новой системе счисления будет последовательность остатков деления, изображенных одной q-ичной цифрой и записанных в порядке, обратном порядку их получения.

Теперь покажем как выполняется преобразование на примере. Переведем число 75 из десятичной системы в двоичную и шестнадцатеричную, сначала в двоичную:

75:2 = 37, остаток 1  это разряд весом 1

37:2 = 18, остаток 1  это разряд весом 2

18:2 =  9, остаток 0  это разряд весом 4

  9:2 =  4, остаток 1  это разряд весом 8

  4:2 =  2, остаток 0  это разряд весом 16

  2:2 =  1, остаток 0  это разряд весом 32

  1:2 =  0, остаток 1  это разряд весом 64 (в нашем случае старший разряд)

Деление заканчивается  в тот момент, когда очередной результат деления даст ноль. Остатки, от деления, выписанные в соответствии с весами разрядов, дадут искомое число. Получаем:


64

32

16

8

4

2

1

 

1

0

0

1

0

1

1

b


 

Теперь сделаем преобразование этого же числа в шестнадцатеричное представление:

75:16 = 4, остаток 11  это разряд весом 1 (11 это Bh)

  4:16 = 0, остаток 4  это разряд весом 16

Остатки представленные в шестнадцатеричном виде с учетом веса разряда и дают искомое шестнадцатеричное число в шестнадцатеричном представлении – 4Bh.

Как видно, такое преобразование намного более компактно.

Теперь покажем как осуществить преобразование шестнадцатеричных чисел в двоичную систему и обратно.

Перевод чисел из двоичной системы в  шестнадцатеричную и из шестнадцатеричной системы в двоичную

Чтобы перевести число из двоичной системы в шестнадцатеричную, его нужно разбить на тетрады и каждую такую группу заменить соответствующей шестнадцатеричной цифрой. Покажем это преобразование на примере числа 1000. (Как мы уже показали в двоичном виде это число запишется как 11 1110 1000b, для наглядности тетрады разделены пробелами). Разбиение начинаем с младших разрядов (справа)

0011

1110

1000

b

3

E

8

h


Обратный перевод шестнадцатеричных чисел в двоичную систему также очень прост: достаточно каждую цифру заменить эквивалентной ей двоичной тетрадой (четверкой цифр). Преобразование будет выглядеть так:

3

E

8

h

0011

1110

1000

b


На практике при преобразовании десятичного числа в двоичную форму бывает удобно сначала преобразовать это число в шестнадцатеричную систему, а затем сделать преобразование из шестнадцатеричной системы в двоичную.

Представление целых чисел со знаком

Для представления как положительных так и отрицательных чисел используется так называемый дополнительный код – наиболее распространенный способ представления отрицательных целых чисел в компьютерах. Основным достоинством дополнительного кода является то, что в  нем  единообразно  реализуются операции сложения чисел разных знаков (алгебраическое сложение),  а  операцию  вычитания  можно свести  к  операции сложения заменой знака вычитаемого на обратный. Дополнительный код отрицательного числа получается инвертированием двоичного числа и прибавлением к нему единицы (поэтому он и называется дополнительным).

Чтобы увидеть, как получается отрицательное число в дополнительном коде, вычтем из нуля единицу. Вычитание будем производить используя восьмиразрядную решетку:


 

0

0

0

0

0

0

0

0

b

0

0

0

0

0

0

0

1

b

1

1

1

1

1

1

1

1

b


Мы получили число -1 в двоичном дополнительном коде. Чтобы убедится, что это в самом деле -1, сложим это число с 1:


1

1

1

1

1

1

1

1

b

0

0

0

0

0

0

0

1

b

0

0

0

0

0

0

0

0

b


Как и следовало ожидать мы снова получили 0.

При записи числа в дополнительном коде старший разряд является знаковым. Если его значение равно 0, то в остальных разрядах записано положительное двоичное число. Если же знаковый разряд равен 1, то в остальных разрядах записано отрицательное двоичное число, преобразованное в дополнительный код.

Посмотрим, как  представляется первые  последовательные  числа при переходе через ноль (для чисел записанных в восьмиразрядную решетку):

0

0000 0000

-1

1111 1111

-2

1111 1110

-3

1111 1101

-4

1111 1100

-5

1111 1011


Для получения значения отрицательного числа все разряды инвертируются, а к результату добавляется единица. Обратное преобразование, то есть перевод из дополнительного в прямой код, осуществляется аналогично.

Получим отрицательное число −5, записанное в дополнительном коде.

Запишем 5 в двоичном виде, дописывая недостающие нули слева:

0000 0101

Инвертируем все разряды числа, получая таким образом обратный код:

1111 1010

Добавим к результату 1, получим искомый результат (−5 в дополнительном коде)

1111 1010 + 1 = 1111 1011 

Для обратного преобразования используется тот же алгоритм. А именно:

Инвертируем все разряды числа

0000 0100

Добавим к результату 1 и получим снова положительное число 5

0000 0100 + 1 = 0000 0101

Числа с плавающей запятой (точкой)

В форме с плавающей запятой число представляется двумя компонентами:  мантиссой и порядком. Мантисса используется для записи  цифр  числа,  а порядок –  для указания положения запятой.

Разрядная сетка машины в этом случае делится на  несколько  частей:

  • один разряд  – для кодирования знака числа (это всегда самый старший, левый, разряд слова);
  • M разрядов  –  для записи мантиссы;
  • Р разрядов   –  для записи порядка (с учетом его знака).

Местоположение запятой при этом  тоже  строго  фиксируется: считается, что мантисса всегда представляется как число, меньшее единицы, но такое, в котором первая цифра после запятой для всех абсолютно чисел отлична от нуля (единственное исключение составляет число 0).  Такая форма  представления  мантиссы  называется нормализованной. Иначе говорят, что мантисса нормализована (приведена к виду: 1 < M <= 0,1).

Итак, число в форме с плавающей запятой представляется последовательностью битов без каких либо явно указанных  разделителей,  но функционально разбитой на три группы (знак числа, мантисса числа, порядок числа).

Рассмотренная форма  кодирования  числа  приводит  к  следующим последствиям:

  • Диапазон  чисел,  представимых в форме с плавающей запятой, определяется главным образом разрядностью порядка (Р).
  • Разрядность  мантиссы  (М)  определяет точное количество значащих цифр в изображении числа.

 


 

 

 

 

 


Покажем на примерах, как записываются некоторые числа в нормализованном виде в четырехбайтовом формате с семью разрядами для записи порядка.

 

Число 6.25

Преобразуем в двоичный вид

 


6.25 =     = = 11001b*2-2


 

Нормализуем, т.е. записываем в виде M * 2p , где 1 < M <= 0,1. Для нашего случая первую часть выражения (мантиссу) умножаем на  2-5 , а вторую на 25 

11001b*2-2 = 11001b * 2-5  *2-2 * 25  =   0.11001b*23 =   0.11001b*211b

Выпишем представление числа в памяти.

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

0

0

0

0

0

0

0

1

1

1

1

0

0

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0


 




Число –0.125


–0.125 = –      = –1*2-3


Нормализуем

–1*2-3 = –0.1*2-2

Отрицательный порядок записываем в дополнительном коде:

–0.1*2-2 = –0.1*2111111101

 

Теперь размещаем число в нашем четырехбайтовом формате

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

1

1

1

1

1

1

1

0

1

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0


 




 

 

Представление чисел в компьютере

Представление целых чисел

Целые числа могут представляться в компьютере со знаком или без знака.

Целые числа без знака обычно занимают в памяти один или два байта и принимают в однобайтовом формате значения от 0000 0000b до 1111 1111b , а в двубайтовом формате – от 0000 0000 0000 0000b до 1111 1111 1111 1111b.

Диапазоны значений целых чисел без знака

Формат числа в байтах

Диапазон

Запись с порядком

Обычная запись

1

0 ... 28–1

0 ... 255

2

0 ... 216–1

0 ... 65535


 Целые числа со знаком обычно занимают в памяти компьютера один, два или четыре байта, при этом самый левый (старший) разряд содержит информацию о знаке числа. Знак «плюс» кодируется нулем, а «минус» – единицей.

Диапазоны значений целых чисел со знаком

Формат числа в байтах

Диапазон

Запись с порядком

Обычная запись

1

–27 ... 27–1

–128 ... 127

2

–215 ... 215–1

–32768 ... 32767

4

–231 ... 231–1

–2147483648 ... 2147483647


 

Представление вещественных чисел

Вещественные числа в компьютерах различных типов записываются по-разному. При этом компьютер обычно предоставляет программисту возможность выбора из нескольких числовых форматов наиболее подходящего для конкретной задачи — с использованием четырех, шести, восьми или десяти байтов.

Приведем характеристики форматов вещественных чисел, используемых IBM-совместимыми персональными компьютерами:

Форматы вещественных чисел

Размер в байтах

Примерный диапазон абсолютных значений

Количество значащих десятичных цифр

Одинарный

4

10–45 … 1038

7 или 8

Вещественный

6

10–39 … 1038

11 или 12

Двойной

8

10–324 … 10308

15 или 16

Расширенный

10

10–4932 … 104932

19 или 20


Из этой таблицы видно, что форма представления чисел с плавающей точкой позволяет записывать числа с высокой точностью и из весьма широкого диапазона

 

 

Процессор

Архитектура компьютера и принципы его работы, сведения общего характера

Термин «архитектура» используется для описания принципа действия, конфигурации и взаимного соединения основных логических узлов ЭВМ. Архитектура – это многоуровневая иерархия аппаратно-программных средств, из которых строится ЭВМ.

Основы учения об архитектуре ЭВМ заложил выдающийся американский математик Джон фон Нейман. Первая ЭВМ «Эниак» была создана в США в 1946 г. В группу создателей входил фон Нейман, который и предложил основные принципы построения ЭВМ: переход к двоичной системе счисления для представления информации и принцип хранимой программы.

Программу вычислений предлагалось помещать в запоминающем устройстве ЭВМ, что обеспечивало бы автоматический режим выполнения команд и, как следствие, увеличение быстродействия ЭВМ. (Ранее все вычислительные машины хранили обрабатываемые числа в десятичном виде, а программы задавались путём установки перемычек на специальной коммутационной панели.) Нейман первым догадался, что программа может также храниться в виде набора нулей и единиц, причём в той же памяти, что и обрабатываемые ею числа.

Принципы фон Неймана

В основу построения подавляющего большинства компьютеров положены следующие общие принципы, сформулированные Джоном фон Нейманом еще в 1945 г.

  1. Принцип программного управления. Программа состоит из набора команд, выполняющихся процессором автоматически в определенной последовательности.

Выборка программы из памяти осуществляется с помощью счетчика команд (PC). Этот регистр процессора последовательно увеличивает хранимый в нем адрес очередной команды на длину команды. А так как команды программы расположены в памяти друг за другом, то тем самым организуется выборка цепочки команд из последовательно расположенных ячеек памяти. Если же нужно после выполнения команды перейти не к следующей, а к какой-то другой, используются команды условного или безусловного перехода, которые заносят в счетчик команд номер ячейки памяти, содержащей следующую команду. Выборка команд из памяти прекращается после достижения и выполнения команды «стоп». (Необходимо уточнить – по команде стоп современный компьютер, конечно же, не останавливается: прикладная программа завершается, а управление возвращается операционной системе, которая, собственно, и запустила программу.)

Таким образом, процессор исполняет программу автоматически, без вмешательства человека.

 

Арифметические основы вычислительных машин