АРИФМЕТИЧЕСКИЕ И ЛОГИЧЕСКИЕ ОСНОВЫ ЭВМ

Арифметические основы цифровой техники

В цифровых устройствах приходится иметь дело с различными видами информации. Это в чистом виде двоичная информация, такая как включен прибор или выключен, исправно устройство или нет. Информация может быть представлена в виде текстов, и тогда приходится буквы алфавита кодировать при помощи двоичных уровней сигнала. Достаточно часто информация может представлять собой числа. Числа могут быть представлены в различных системах счисления. Форма записи в них чисел существенно различается между собой, поэтому, прежде чем перейти к особенностям представления чисел в цифровой технике, рассмотрим их запись в различных системах счисления.

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

Система счисления — это совокупность приемов и правил для представления чисел с помощью цифровых знаков.

Существует множество способов записи чисел цифровыми знаками, но любая применяемая система счисления должна обеспечивать:

  • • диапазон представления любого числа;
  • • единственность представления (каждой комбинации символов соответствует только одна величина).

Все системы счисления делятся на позиционные и непозиционные. В непозиционной системе счисления значимость цифры в любом месте числа одинакова, т.е. не зависит от позиции расположения. Например, унарная система с одним символом, равным единице. Такая система счисления предназначена для суммарного счета (узелки на «память», зарубки, черточки, счет на пальцах и пр.). Для изображения какого-то числа в этой системе нужно записать число единиц (палочек), равное данному числу. Эта система неэффективна, так как запись числа получается слишком длинной.

Другой пример «почти непозиционной» системы счисления — римская система счета. В римской системе счета используются следующие символы:

I — 1; V — 5; X — 10; Ь — 50; С — 100; 0-500; М - 1000.

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

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

ССХУУП =100+100+10 + 5 + 5+1 + 1= 222;

Х1Х1У= 10 + (10 — 1) = 19.

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

Позиционные системы счисления — это системы счисления, в которых значение цифры в записи числа N зависит от ее позиции (места). Например, в десятичной системе счисления число 05 обозначает пять единиц, 50 обозначает пять десятков, 500 — пять сотен и т.д.

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

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

Примеры некоторых позиционных систем счисления и их применение приведены в табл. 2.1.

В табл. 2.2 для удобства сопоставления приведены первые 23 числа натурального ряда чисел в различных системах счисления.

Как видно из табл. 2.2, для записи одного и того же числа в различных системах счисления требуется разное число позиций или разрядов. Например, 14|0 = 1 1 102 = 168 = Е. То есть в десятичной системе счисления число 14 занимает две позиции (два разряда), в двоичной системе счисления — четыре позиции, в шестнадцатеричной системе счисления — одну позицию. Чем меньше основание системы счисления <7, тем больше длина числа (длина разрядной сетки).

Примеры позиционных систем счисления

Наименование

системы

счисления

Основание

системы

счисления

Используемые

цифры

Применение

Двоичная

2

0 и 1

В цифровой вычислительной технике, дискретной математике, программировании

и пр.

Троичная

3

Любые три знака: (-, 0,+), (-1,0,+1), (А, В, С), (X, У, Т) или три цифры: (1,2, 3)

В цифровой электронике

Восьмеричная

8

0, 1,2,..., 7

В цифровой вычислительной технике, программировании

Десятичная

10

0, 1,2,..., 9

Повсеместное

Шестнадцате

ричная

16

0, 1,2,..., 9,

А, В, С,Т

В цифровой вычислительной технике, программировании

Шестидесяте

ричная

60

00, 01,02,..., 59

Как единицы измерения времени, измерения углов, координат,

долготы и широты

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

Пусть длина разрядной сетки равна положительному числу ./V, максимальное число равно

?^((Дтах Я ~ 1 •

Например, при N = 8:

Лю)тах = Ю8 - 1 = 9999999(|0);

Л(2)тах - 28 - 1 = 256 - 1 = 257(|0) =1111111(2);

А( 16)тах= 168 - 1 =4294967296 - 1 = 4294967295(10) = РРРРРРР(16).

Таким образом, при одинаковой длине разрядной сетки N=8 максимальное по абсолютному значению Л(16)П1ах > Л(10)П1ах > Л(2)гпах, т.е. чем больше #, тем больше Л((?)тах.

Натуральный ряд чисел в различных системах счисления

Десятичная

Двоичная

Восьмеричная

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

0

0000

0

0

1

0001

1

1

2

0010

2

2

3

ООП

3

3

4

0100

4

4

5

0101

5

5

6

ОНО

6

6

7

0111

7

7

8

1000

10

8

9

1001

11

9

10

1010

12

А

11

1011

13

В

12

1100

14

С

13

1101

15

И

14

1110

16

Е

15

1111

17

Е

16

10000

20

10

17

10001

21

И

18

10010

22

12

19

10011

23

13

20

10100

24

14

21

10101

25

15

22

10110

26

16

23

10111

27

17

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

Перевод в десятичную систему счисления. Любое число N в позиционной системе счисления можно представить в виде полинома [1]

Для перевода в десятеричную систему вычисляем такую сумму.

Например, число 253,2410 в обычной десятичной форме (<7 = 10) можно представить следующим образом:

Л^10 = 253,24(10) = 2 • 102 + 5 • 10[1] + 3 • 10° + 2 • 10"[1] + 4 - КГ2.

Пример 2.1. Двоичное число 1101,01(2) перевести в десятичную систему счисления.

В двоичной системе счисления для представления чисел используются две цифры 0 И 1 И двоичное ЧИСЛО 1 1 01,012 (<7 = 2) можно определить следующим образом:

ТУ2 = 1101,012 = 1 • 23 + 1 • 22 + 0 • 2[1] + 1 • 2° + 0 • 2_| + 1 • 2-2 =

“=8 + 4 + 0+1+0+1/4= 14,2510.

Если по правилам десятичной арифметики выполнить действия в правой части приведенного равенства, то получим десятичный эквивалент двоичного числа:

1101,012 = 8 + 4 + 0+ 1 +0 + 1/4 = 14,2510.

Пример 2.2. Восьмеричное число 53,28 (# = 8) перевести в десятичную систему счисления:

уу8 = 53,28 = 5 • 8[1] + 3 • 8° + 2 - 8“[1] + 4 • 8“2 = 40 + 3 + 2/8 = 43,2510.

Пример 2.3. Шестнадцатеричное числОу4/7,816 (#= 16) перевести в десятичную систему счисления:

16 = АГ,816 = 10- 162+ 15- 16' + 7 - 16° + 8 - 16"[1] =

= 2560 + 240 + 7 + 8/16 = 2807,2510.

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

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

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

Пример 2.4. Число 26,62510 перевести в двоичную систему счисления.

Переводим целую часть числа:

  • 26 : 2 = 13, остаток равен 0;
  • 13:2 = 6, остаток равен 1;
  • 6:2 = 3, остаток равен 0;
  • 3:2=1, остаток равен 1;
  • 1 : 2 = 0, остаток равен 1.

Десятичное число стало равно нулю, деление закончено. Переписываем все остатки снизу вверх и получаем двоичное число 110102.

Переводим дробную часть числа:

  • 0,625 • 2 = 1,250, целая часть 1;
  • 0,250 • 2 = 0,500, целая часть 0;
  • 0,500 • 2 = 1,000, целая часть 1;
  • 0,000 • 2 = 0,000, целая часть 0.

Целая часть стала равной нулю. Переписываем целые части результатов умножения сверху вниз и получаем двоичное число 0,10102.

Пример 2.5. Число 70,0510 перевести в восьмеричную систему счисления с точностью по 4-й разряд.

Переводим целую часть числа:

  • 70 : 8 = 8, остаток равен 6;
  • 8:8=1, остаток равен 0;
  • 1 : 8 = 0, остаток равен 1.

Десятичное число стало равно нулю, деление закончено. Переписываем все остатки снизу вверх и получаем восьмеричное число 1068.

Переводим дробную часть числа:

  • 0,05 • 8 = 0,40, целая часть 0;
  • 0,40 • 8 = 3,20, целая часть 3;
  • 0,30 • 8 = 2,40, целая часть 2;
  • 0,40 • 8 = 3,20, целая часть 3.

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

Пример 2.6. Число 76,0510 перевести в шестнадцатеричную систему счисления с точностью по 4-й разряд.

Переводим целую часть числа:

  • 76 : 16 = 4, остаток равен 12 —» С;
  • 4 : 16 = 0, остаток равен 4.

Десятичное число стало равно нулю, деление закончено. Переписываем все остатки снизу вверх и получаем шестнадцатеричное число 4С16.

Переводим дробную часть числа:

  • 0,05 • 16 = 0,80, целая часть 0;
  • 0,80 • 16 = 12,80, целая часть 12 —> С;
  • 0,80 • 16 = 12,80, целая часть 12 —> С;
  • 0,80 -16= 12,80, целая часть 12 —> С.

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

Пример 2.7. Число 6610 перевести в произвольную систему счисления, например с основанием ц = 5.

Переводим целую часть числа:

  • 66 : 5 = 13, остаток равен 1;
  • 13:5 = 2, остаток равен 3;
  • 2:5 = 0, остаток равен 2.

Десятичное число стало равно нулю, деление закончено. Переписываем все остатки снизу вверх и получаем пятеричное число 2315.

Перевод из двоичной системы в восьмеричную и шестнадцатеричную. Для этого типа операций существует упрощенный алгоритм.

Перевод целой части. Число 2 возводится в ту степень, которая необходима для получения основания системы, в которую требуется перевести. Для восьмеричной системы (8 = 23) получаем число 3 (триада), для шестнадцатеричной системы (16 = 24) получаем число 4 (тетрада).

Разбиваем переводимое число на количество цифр, равное 3 для восьмеричной системы и равное 4 для шестнадцатеричной системы счисления.

Преобразуем триады по таблице триад восьмеричной системы и тетрады по таблице тетрад для шестнадцатеричной системы счисления (табл. 2.3).

Пример 2.8. Двоичное число 1011102 перевести в восьмеричную и шестнадцатеричную системы счисления:

  • • восьмеричная — 101 110 —> 568;
  • • шестнадцатеричная — 0010 1110 —> 2Е.

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

Таблица триад и тетрад

Триады

0

1

2

3

4

5

6

7

000

001

010

011

100

101

ПО

111

Тетрады

0

1

2

3

4

5

6

7

0000

0001

0010

ООП

0100

0101

оно

0111

8

9

4

в

с

D

Е

F

1000

1001

1010

1011

1100

1101

1110

1111

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

Пример 2.9. Перевести 11101,010112 в восьмеричную и шестнадцатеричную системы счисления:

  • • восьмеричная — 011 101,010 110 —> 35,268;
  • • шестнадцатеричная — 0001 1101,0101 1000 —> 1Z),58,6.

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

Для этого типа операций существует упрощенный алгоритм-перевертыш. Для восьмеричной системы преобразуем по таблице в триплеты: 0->000 4 —> 100;

  • 1 —> 001 5 —> 101;
  • 2 —> 010 6 —> 110;
  • 3 —> 011 7 —> 111.

Для шестнадцатеричной — преобразуем по таблице в квартеты:

0000

4 —> 0100

8 —> 1000

С-> 1100;

0001

5 —> 0101

9 —> 1001

Z)-> 1101;

0010

6->0110

А -> 1010

?->1110;

ООП

7->0111

В-> 1011

?->1111.

Пример 2.10. Перевести восьмеричное число 2438 и шестнадцатеричное число7С16 в двоичную систему счисления:

  • 2438 -> ПО 1000112;
  • 16 —> 1111 11002.

Двоичная арифметика

Сложение. Таблица сложения двоичных чисел проста:

  • 0 + 0 = 0;
  • 0+1 = 1;
  • 1+0=1;
  • 1 + 1 = 10;
  • 1 + 1 + 1 = 11.

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

Пример 2.11. Выполнить сложение в двоичной системе счисления.

1 1 1 Перенос в старший разряд

+ 1 1 0 0 0 1 = 49 — первое слагаемое

  • 1 1 0 1 1 = 27 — второе слагаемое
  • 1 0 0 1 1 0 0 = 76 — сумма

Двоичное вычитание. Рассмотрим правила вычитания меньшего числа из большего. В простейшем случае для каждого разряда правила двоичного вычитания имеют вид

_ 0 _ 1 _ 1 ? 0

  • 2 2 11
  • 0 10 1

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

Рассмотрим пример вычитания многоразрядных чисел (из большего числа вычитается меньшее).

Пример 2.12. Вычитание в двоичной системе счисления:

  • 0 111 Изменение уменьшаемого в результате займа
  • 1 1 0 0 0 1 = 49 — уменьшаемое
  • 110 11 - 21 — вычитаемое
  • 10 1 1 0 = 22 — разность

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

Пример 2.13. Умножение в двоичной системе счисления:

  • *1011
  • 1011
  • 1011
  • 110111

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

Запись десятичных чисел (двоично-десятичный код)

Иногда бывает удобно хранить числа в памяти процессора в десятичном виде (например, для вывода на экран дисплея). Для записи таких чисел используются двоично-десятичные коды. Для записи одного десятичного разряда используется четыре двоичных бита (тетрады). При помощи четырех бит можно закодировать 16 цифр (24 = 16). Лишние комбинации в двоично-десятичном коде являются запрещенными. Соответствие двоично-десятичного кода и десятичных цифр приведено в табл. 2.4.

Таблица 2.4

Соответствие двоично-десятичного кода и десятичных цифр

Двоично-десятичный код

Десятичный код

0

0

0

0

0

0

0

0

1

1

0

0

1

0

2

0

0

1

1

3

0

1

0

0

4

0

1

0

1

5

0

1

1

0

6

0

1

1

1

7

1

0

0

0

8

1

0

0

1

9

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

Пример 2.14. Записать двоично-десятичный код числа 125810-

1258ш = 0001 0010 0101 10002.

В первой тетраде записана цифра 1, во второй — 2, в третьей — 5, а в последней тетраде записана цифра 8. В данном примере для записи числа 1258 потребовалось четыре тетрады. Количество ячеек памяти микропроцессора зависит от его разрядности. При 16-раз-рядном процессоре все число уместится в одну ячейку памяти.

Пример 2.15. Записать двоично-десятичный код числа 58910:

58910 = 0000 0101 1000 10012.

В данном примере для записи числа достаточно трех тетрад, но ячейка памяти 16-разрядная. Поэтому старшая тетрада заполняется нулями. Они не изменяют значение цифры.

При записи десятичных чисел часто требуется записывать знак числа и десятичную запятую (в англоязычных странах — точку). Двоично-десятичный код часто применяется для набора телефонного номера или набора кодов телефонных служб. В этом случае кроме десятичных цифр часто применяются символы «*» или «#». Для записи этих символов в двоично-десятичном коде применяются запрещенные комбинации (табл. 2.5).

Таблица 2.5

Соответствие двоично-десятичного кода и дополнительных символов

Двоично-десятичный код

Дополнительный символ

1

0

1

0

* (звездочка)

1

0

1

1

# (решетка)

1

1

0

0

+ (плюс)

1

1

0

1

— (минус)

1

1

1

0

, (десятичная запятая)

1

1

1

1

Символ гашения

Достаточно часто в памяти процессора для хранения одной десятичной цифры выделяется одна ячейка памяти (8-, 16- или 32-раз-рядная). Это делается для повышения скорости работы программы. Для того чтобы отличить такой способ записи двоично-десятичного числа от стандартного, способ записи десятичного числа, как это показано в примере, называется упакованной формой двоично-десятичного числа.

Пример 2.16. Записать неупакованный двоично-десятичный код числа 125810 для 8-разрядного процессора:

  • 1258 00000001
  • 00000010 00000101 00001000

В первой строке записана цифра 1, во второй — 2, в третьей — 5, а в последней строке записана цифра 8. В данном примере для записи числа 1258 потребовалось четыре строки (ячейки памяти).

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

  • 0 0 0 1 10 0 0 0 0 0 1 0 0 1 1
  • 0 0 10 10 11

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

  • 0 0 10 10 11
  • 0 0 0 0 0 1 1 0
  • 0 0 1 1 0 0 0 1

Формы представления в ЭВМ числовых данных

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

Примеры естественной формы записи чисел:

  • 15300 — целое число; 0,000564 — правильная дробь;
  • 6,4540 — неправильная дробь.

Пример нормальной формы записи одного и того же числа 25 340 в зависимости от ограничений, накладываемых на нормальную форму:

25 340 = 2,534- 104 = 0,2534 - 105 = 2534000 - 10“2ит.д.

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

Представление числа в нормальной форме называют представлением с плавающей запятой (положение запятой меняется).

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

Характер программирования зависит от способа представления чисел.

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

Фиксированная запятая (точка)

В современных ЭВМ способ представления чисел с фиксированной запятой в вычислительной технике используется преимущественно для представления целых чисел.

Так как числа бывают положительными и отрицательными, то в разрядной сетке при их машинном представлении один или два разряда (для модифицированных кодов) отводятся под знак числа, а остальные разряды образуют поле числа. В знаковые разряды, которые могут располагаться как в начале, так и в конце числа, записывается информация о знаке числа. Знак «+» кодируется нулем, знак «-» кодируется единицей. Для модифицированных кодов знак «+» кодируется двумя нулями, знак «-» кодируется двумя единицами. Модифицированные коды введены для обнаружения неправильного результата вычислений, т.е. когда результат превышает максимальный размер разрядной сетки и необходим перенос из значащего разряда.

Например, в результате выполнения операций в знаковом разряде число 01 свидетельствует о положительном переполнении разрядной сетки, а число 10 — об отрицательном переполнении разрядной сетки.

Поле числа имеет постоянное число разрядов — п. Диапазон представления целых чисел ограничивается значениями -(2п - 1) и +(2" - 1).

Например, в двоичном коде, используя 6-разрядную сетку, число 7 в форме с фиксированной запятой можно представить в виде

0.001112,

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

В дальнейшем часто будет использоваться в примерах такой вид представления числа в машинной форме. Можно использовать и другую форму представления числа в машинной форме:

[0]001112,

где знаковый разряд выделяется квадратными скобками.

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

|/1|тах = (2(п - 1) - 1),

где п — полная длина разрядной сетки.

В случае 16-разрядной сетки

|Л|тах = (2(16- 1)- 1) = 3276710,

т.е. диапазон представления целых чисел в этом случае будет от +3 276710 до -3276710.

Для случая, когда запятая фиксируется правее младшего разряда мантиссы, т.е. для целых чисел, числа, у которых модуль больше чем (2(п - 1) - 1) и меньше единицы, не представляются в форме с фиксированной запятой. Числа, по абсолютной величине меньшие единицы младшего разряда разрядной сетки, называются в этом случае машинным нулем. Отрицательный ноль запрещен.

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

Представление отрицательных чисел в формате с фиксированной запятой

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

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

А-В = А + (-В).

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

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

тогда число в этом же коде представляется как

[—Д]Пр — 1-?7 й/7_| ЙЛ_2....ЙГ| а0,

а в обратном (инверсном) коде это число будет иметь вид

[—Д]0б 1*^77 *2/7-1 *2_а0,

где

а, - 1, если а1 - 0, я,- = 0, если я, = 1,

я, — цифра /'-го разряда двоичного числа. Следовательно, при переходе от прямого кода к обратному все цифры разрядов матиссы числа инвертируются.

Тогда число в дополнительном коде изображается в виде [8]

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

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

Представим, что мы имеем только два разряда для представления чисел в десятичной системе счисления. Тогда максимальное число, которое можно изобразить, будет 99, а вес третьего, несуществующего старшего разряда будет 102, т.е. 100. В таком случае для числа 20 дополнительным будет число 80, которое дополняет 20 до 100 (100 - 20 = 80). Следовательно, по определению вычитание

50-20 = 30

можно заменить на сложение:

50 + 80= 1 30.

Здесь старшая единица выходит за пределы выделенной разрядной сетки, в которой остается только число 30, т.е. результат вычитания из 50 числа 20.

А теперь рассмотрим похожий пример для чисел, представленных 4-разрядным двоичным кодом. Найдем дополнительное число для 00102 = 210. Надо из [1]0000 вычесть [0]0010, получим [0] 1110, которое и является дополнительным кодом 2. Разряд, изображенный в квадратных скобках, на самом деле не существует. Но так как у нас 4-раз-рядная сетка, то выполнить такое вычитание в принципе невозможно, а тем более мы стараемся избавиться от вычитания. Поэтому дополнительный код числа получают способом, описанным ранее, т.е. сначала получают обратный код числа, а затем прибавляют к нему единицу. Проделав все это с нашим числом (2), нетрудно убедиться, что получится аналогичный ответ.

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

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

Рассмотрим простые примеры.

Семерка в прямом коде представляется так:

[7]пр = 0.00011 12.

Число -7 в прямом коде

[—7]пр = 1.0001112,

а в обратном коде будет иметь вид

[—7]об = 1.1110002,

т.е. единицы заменяются нулями, а нули — единицами. То же число в дополнительном коде будет

[—7]доп = 1.1110012.

Рассмотрим еще раз, как процедура вычитания при помощи представления вычитаемого в дополнительном коде сводится к процедуре сложения. Вычтем из 10 число 7: 10-7 = 3. Если оба операнда представлены в прямом коде, то процедура вычитания выполняется так:

0.001010 -1.000111 0.000011 =310.

А если вычитаемое, т.е. -7, представить в дополнительном коде, то процедура вычитания сводится к процедуре сложения:

0.001010 + 1,111001 1 0.000011 =310.

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

Вещественные числа

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

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

Я = ш • рп.

Например, число 25,324 можно записать в таком виде:

0.25324- 102.

Здесь т = 0.25324 — мантисса; п = 2 — порядок. Порядок указывает, на какое количество позиций и в каком направлении должна «переплыть», т.е. сместиться, десятичная точка в мантиссе. Отсюда название «плавающая точка».

Однако справедливы и следующие равенства:

25,324 = 2,5324- 101 = 0,0025324 • 104 = 2532,4 - 10"2ит.п.

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

0,1 р<т< р.

Иначе говоря, мантисса меньше единицы и первая значащая цифра — не ноль. Значит, для рассмотренного числа нормализованным представлением будет 0.25324 • 102. В разных типах ЭВМ применяются различные варианты представления чисел в форме с плавающей точкой. Для примера рассмотрим один из возможных. Пусть в памяти компьютера вещественное число представляется в форме с плавающей точкой в двоичной системе счисления = 2) и занимает ячейку размером 4 байта. В ячейке должна содержаться следующая информация о числе: знак числа, порядок и значащие цифры мантиссы. Вот как эта информация располагается в ячейке:

± машинный

порядок

МАНТИССА

1-й байт

2-й байт

3-й байт

4-й байт

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

В семи двоичных разрядах помещаются двоичные числа в диапазоне от 0000000 до 1111111. В десятичной системе это соответствует диапазону от 0 до 127 — всего 128 значений. Знак порядка в ячейке не хранится. Но порядок, очевидно, может быть как положительным так и отрицательным. Разумно эти 128 значений разделить поровну между положительными и отрицательными значениями порядка.

В таком случае между машинным порядком и истинным (назовем его математическим) устанавливается следующее соответствие:

Машинный порядок

0

1

2

3

• • •

64

65

• • •

125

126

127

Математический порядок

-64

-63

-62

-61

• • •

0

1

• • •

61

62

63

Если обозначить машинный порядок Мр, а математический — р, то связь между ними выразится формулой

Мр = р + 64.

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

Полученная формула записана в десятичной системе. Поскольку 64|0 = 4016 (проверьте!), то в шестнадцатеричной системе формула примет вид

Мр=Рб + 4016.

И наконец, в двоичной системе

Мр22+ юо 00002.

Теперь мы можем записать внутреннее представление числа 25,324 в форме с плавающей точкой.

  • 1. Переведем его в двоичную систему счисления с 24 значащими цифрами:
  • 25,32410= 11001,01010010111100011012.
  • 2. Запишем в форме нормализованного двоичного числа с плавающей точкой:
  • 0,110010101001011110001101 • Ю101.

Здесь мантисса, основание системы счисления (210 = 102) и порядок (510= 1012) записаны в двоичной системе.

3. Вычислим машинный порядок:

Мр2= 101 + 100 0000= 100 0101.

4. Запишем представление числа в ячейке памяти:

01000101

11001010

10010111

10001101

Это и есть искомый результат. Его можно переписать в более компактной шестнадцатеричной форме:

45

СА

97

8 О

Для того чтобы получить внутреннее представление отрицательного числа -25,324, достаточно в полученном выше коде заменить в разряде знака числа 0 на 1.

Получим:

11000101

11001010

10010111

10001101

А в шестнадцатеричной форме:

С5

СА

97

8 О

Никакого инвертирования, как для отрицательных чисел с фиксированной точкой, здесь не происходит.

Рассмотрим, наконец, вопрос о диапазоне чисел, представимых в форме с плавающей точкой. Очевидно, положительные и отрицательные числа расположены симметрично относительно нуля. Следовательно, максимальное и минимальное числа равны между собой по модулю: Ятах = |/?т;п|. Наименьшее по абсолютной величине число равно нулю. Чему же равно Ятах? Это число с самой большой мантиссой и самым большим порядком:

0,111111111111111111111111 • ю5111Ш.

Если перевести в десятичную систему, то получится

Лтах=(1 -2-24)-264= 1019.

Очевидно, что диапазон вещественных чисел значительно шире диапазона целых чисел. Если в результате вычислений получается число, по модулю большее чем Ятах, то происходит прерывание работы процессора. Такая ситуация называется переполнением при вычислениях с плавающей точкой. Наименьшее по модулю ненулевое значение равно

(1/2) • 2-64 = 2-66.

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

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

N = 2'-(U-L+ 1)+ 1.

Здесь t — количество двоичных разрядов мантиссы; U — максимальное значение математического порядка; L — минимальное значение порядка. Для рассмотренного нами варианта (/ = 24, U = 63, L = -64) получается

N=2 146683548.

Все же остальные числа, не попадающие в это множество, но находящиеся в диапазоне допустимых значений, представляются в памяти приближенно (мантисса обрезается на 24-м разряде). А поскольку числа имеют погрешности, то и результаты вычислений с этими числами также будут содержать погрешности. Из сказанного следует вывод: вычисления с вещественными числами в компьютере выполняются приближенно.

Единицы измерения информации

Бит (англ, binary digit; также игра слов: англ, bit — немного) (один двоичный разряд в двоичной системе счисления) — одна из самых известных единиц измерения количества информации.

Ниббл (англ, nibble, nybble), или полубайт, — единица измерения информации, равная четырем двоичным разрядам (битам); удобна тем, что представима одной шестнадцатеричной цифрой, т.е. является одним шестнадцатеричным разрядом.

Байт (англ, byte, представляет собой сокращение словосочетания BinarYTErm — «двоичный терм») — единица хранения и обработки цифровой информации. В современных вычислительных системах байт считается равным восьми битам, в этом случае он может принимать одно из 28 = 256 различных значений (состояний, кодов). Однако в истории компьютеров известны решения с другим размером байта, например 6 битов, 36 битов в PDP-10. Поэтому иногда в компьютерных стандартах и официальных документах для однозначного обозначения 8-битного слова используется термин «октет» (лат. octet). В большинстве вычислительных архитектур байт — это минимальный независимо адресуемый набор данных.

Машинное слово — машиннозависимая и платформозависимая величина, измеряемая в битах или байтах (тритах или трайтах), равная разрядности регистров процессора и/или разрядности шины данных (обычно некоторая степень двойки). На ранних компьютерах размер слова совпадал также с минимальным размером адресуемой информации (разрядностью данных, расположенных по одному адресу); на современных компьютерах минимальным адресуемым блоком информации обычно является байт, а слово состоит из нескольких байтов. Машинное слово определяет следующие характеристики аппаратной платформы:

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

Десятичные и двоичные кратные приставки

Двоичные приставки — приставки перед единицами измерения, обозначающие их умножение на 210 = 1024. Благодаря близости чисел 1024 и 1000 двоичные приставки построены по аналогии со стандартными десятичными приставками СИ. Каждая двоичная приставка получается заменой последнего слога соответствующей десятичной приставки на би (от лат. binarius — двоичный). Двоичные приставки используются для образования единиц измерения информации, кратных битам и байтам. Приставки были введены Международной электротехнической комиссией (МЭК) в марте 1999 г. Выглядят они следующим образом (табл. 2.6).

Представление текстовой информации в ЭВМ.

Кодировки ASCII и Unicode

Для представления текстовой информации в ЭВМ графическому отображению каждого символа сопоставляется некий код. Набор символов/кодировка (англ, character set) — таблица, задающая кодировку конечного множества символов алфавита (обычно элементов текста: букв, цифр, знаков препинания). Такая таблица сопоставляет каждому символу последовательность длиной в один или несколько символов другого алфавита, например нулей и единиц (битов).

ASCII (англ. American Standard Code for Information Interchange) — американская стандартная кодировочная таблица для печатных символов и некоторых специальных кодов (коды с 0x00 по 0x1 F).

ASCII представляет собой кодировку для представления десятичных цифр, латинского и национального алфавитов, знаков препи-

Двоичные приставки для образования единиц измерения информации

Двоичная

приставка

Аналогичная

десятичная

приставка

Сокращения по МЭК для битов, байтов

Значение, на которое умножается исходная величина

киби/кіЬі (210)

кило (103)

Кибит, КиБ/КлВ

210= 1024

меби/теЫ (220)

мега (106)

Мибит, МиБ/МШ

220 = 1 048 576

гиби/§іЬі (230)

гига (109)

Гибит, ГиБ/вШ

230 = 1 073741 824

тебиДеЬі (240)

тера (1012)

Тибит, ТиБ/ТШ

240 = 1 099511 627776

пеби/реЬі (250)

пета (1015)

Пибит, ПиБ/Р1В

250= 1 125 899906842624

эксби/ехЫ (260)

экса (1018)

Эибит, ЭиБ/ЕШ

260 = 1 152921504606846976

зеби/геЬі (270)

зетта (1021)

Зибит, ЗиБ/71В

270 = 1 180591620717411 303424

йоби/уоЬі (280)

йотта (1024)

Йибит, ЙиБ/У1В

280 = 1 208925819614629 174706 176

нания и управляющих символов. Изначально разработанная (в 1963 г.) как 7-битная, после широкого распространением 8-бит-ного байта ASCII стала восприниматься как половина 8-битной. В компьютерах обычно используют расширения ASCII с задействованным 8-м битом и второй половиной другой кодовой таблицы (например, КОИ 8).

Юникод или Уникод (англ. Unicode) — стандарт кодирования символов, позволяющий представить знаки практически всех письменных языков.

Стандарт предложен в 1991 г. некоммерческой организацией «Консорциум Юникода» (англ. Unicode Consortium, Unicode Inc.). Применение этого стандарта позволяет закодировать очень большое число символов из разных письменностей: в документах Unicode могут соседствовать китайские иероглифы, математические символы, буквы греческого алфавита, латиницы и кириллицы; при этом становится ненужным переключение кодовых страниц.

Стандарт состоит из двух основных разделов: универсального набора символов (англ. UCS, universal character set) и семейства кодировок (англ. UTF, Unicode transformation format). Универсальный набор символов задает однозначное соответствие символов кодам, представляющим неотрицательные целые числа. Семейство кодировок определяет машинное представление кодов UCS.

Для определения формата представления Юникода в начало текстового файла записывается сигнатура — код FEFF (символ с таким кодом в Unicode отсутствует), также именуемый меткой порядка байтов (англ, byte order mark, BOM). Также этот способ иногда применяется для обозначения формата UTF8, хотя к этому формату и неприменимо понятие порядка байтов.

Основные Unicode-кодировки:

  • • UTF-8 (EF ВВ BF);
  • • UTF-16BE (FE FF);
  • • UTF-16LE (FF FE);
  • • UTF-32BE (0000 FE FF);
  • • UTF-32LE (FF FE0000).

  • [1] + ^т-2Ят 2 + ••• + + Яо
  • [2] + ^т-2Ят 2 + ••• + + Яо
  • [3] + ^т-2Ят 2 + ••• + + Яо
  • [4] + ^т-2Ят 2 + ••• + + Яо
  • [5] + ^т-2Ят 2 + ••• + + Яо
  • [6] + ^т-2Ят 2 + ••• + + Яо
  • [7] + ^т-2Ят 2 + ••• + + Яо
  • [8] —•^]доп — 1—^1об
 
< Пред   СОДЕРЖАНИЕ     След >