Опубликован: 08.11.2022 | Доступ: свободный | Студентов: 62 / 0 | Длительность: 06:05:00
Лекция 3:

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

< Лекция 2 || Лекция 3: 12 || Лекция 4 >

Двоичная и другие системы исчисления; машинное слово и машинная арифметика; единицы измерения цифровых данных: килобайты, мегабайты, гигабайты, терабайты.

Двоичная и другие системы исчисления

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

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

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

Рассмотрим, как представляются числа в различных системах исчисления. Сначала разложим число 1929 по десятичному основанию:

1929_{10}=1*10^3+9*10^2+2*10^1+9*10^0

Теперь разложим это число по двоичному основанию:

1929_{10}=1*2^{10}+1*2^9+1*2^8+1*2^7+0*2^6+\\
0*2^5+0*2^4+1*2^3+0*2^2+0*2^1+1*2^0=11110001001_2

В ряде случаев используется шестнадцатеричное представление чисел, то есть разложение по основанию 16. Шестнадцатеричная система исчисления оказывается востребованной, например, при визуализации двоичных данных (в частности, бинарного кода программ) для восприятия человеком. Хотя, конечно, код программы - не самое понятное, что можно себе вообразить, его шестнадцатеричное представление более читабельно, чем двоичное. В шестнадцатеричной системе исчисления используются десятичные цифры от 0 до 9 и несколько букв для обозначения чисел диапазоне от 10 до 15: A, B, C, D, E, F. Так, число 1929 в шестнадцатеричном представлении выглядит так:

1929_{10}=7*16^2+8*16^1+9*16^0=789_{16}

В общем случае представление натурального числа D в k-ичной системе исчисления выглядит так:

D_{10}=\sum_{i=0}^{p-1}k^i*d_i=d_0, \dots, d_{{p-1}_k}

где p- это количество разрядов (цифр) числа, а  d_0, \dots, d_{p-1} - его k-ичные цифры, \fokall I d_i \in \{0, \dots, k-1\}. Такое число изображается с помощью десятичных цифр, а также, возможно, с применением дополнительных цифр, если основание системы исчисления больше, чем 10.

Таким образом в шестнадцатеричной системе исчисления мы имеем мы имеем 16 цифр, в десятичной - 10, а в двоичной - 2. С помощью этих цифр в каждой системе исчисления составляются числа.

Нетрудно составить алгоритм, который раскладывает произвольное натуральное число в k-ичном исчислении, а также доказать единственность такого представления.

Машинное слово

Двоичное представление числа 1929 состоит из 11 цифр, следовательно, для его хранения требуется 11 бит. Можно сказать, что бит является атомарной ячейкой в памяти ЭВМ. Но адресовать каждый бит не целесообразно: ЭВМ работает со строками, числами различного вида, а также массивами, меняя сразу по многу бит. Поэтому целесообразно адресовать не биты, а группы битов. В современных компьютерах атомарным множеством бит является байт - набор из 8 бит. Многие команды процессора умеют работать с байтами. Соответственно, данные выравниваются до границы байта. Так, число 1929 в двоичном виде занимает 2 байта и выглядит так: 0000011110001001. Пять лишних бит заполняется нулями.

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

Машинное слово - это атомарное количество информации, с которым может оперировать данная ЭВМ. Каждая ЭВМ имеет фиксированный размер машинного слова, например, в современных Intel-архитектурах размер машинного слова составляет 32 или 64 бита то есть четыре или восемь байт соответственно.

Размер машинного слова задаёт следующие важные характеристики ЭВМ:

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

У первого процессора Intel 4004 размер машинного слова составлял 4 бита. У ЭВМ следующих поколений размер машинного слова составлял 6, 18, 20, 36 или 48 бит. У большинства современных компьютеров (Intel x86 и др.), которые мы упоминаем в данном курсе, размер машинного слова, как мы уже упоминали выше, составляет 32 или 64 бита. Со временем размер машинного слова неуклонно увеличивается, что закономерно, так как это позволяет процессору за одну элементарную команду обрабатывать больший объём данных. В то же время увеличение машинного слова требует более развитых технологий аппаратной реализации.

Машинная арифметика

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

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

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

1_{10}=0000 0001-2\\
10_{10}=1*2^3+0*2^2+1*2^1+0*2^0=0000 1010_2\\
21_{10}=1*2^4+0*2^3+1*2^2+0*2^1+1*2^0=0001 0101_2

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

1111 1111_2=1*2^8+1*2^7+1*2^6+1*2^5+1*2^4+1*2^3+1*2^2+1*2^1+1*2^0=511_{10}

Однако мы пока говорили о неотрицательных целых числах. Для представления отрицательных целых резервируется старший бит - он делается знаковым: если этот бит равен 0, то перед нами неотрицательное число, а если он равен 1, то перед нами отрицательное целое число. Ниже представлены восьмибитовые отрицательные числа.

-1_{10}=1000 0001_2\\
-10_{10}=1000 1010_2\\
-21_{10}=1001 0101_2

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

< Лекция 2 || Лекция 3: 12 || Лекция 4 >
Наталья Ра
Наталья Ра

Здравствуйте! Когда появится возможность сдать экзамен на сертификат?