- •Раздел 3 Представление и обработка чисел в компьютере
- •1 В чем отличие позиционных и непозиционных систем счисления? Приведите примеры.
- •2На что указывает основание системы счисления
- •3Назовите алфавит двоичной, восьмеричной и шестнадцатеричной систем счисления
- •4Сформулируйте правила перевода чисел из одной системы счисления в другу
- •5Назовите форматы записи целых и вещественных чисел в памяти эвм.
- •1.1.3 Дополнительный код
- •Обратный код
- •Сложение в обратном коде
- •7Как выполняется сложение чисел в формате с фиксированной запятой
- •8Как выполняется сложение чисел в формате с плавающей запятой
- •9Как выполняется умножение чисел в формате с фиксированной запятой
- •10Как выполняется умножение чисел в формате с плавающей запятой
- •11Как выполняется деление чисел в формате с фиксированной запятой?
- •12Как получить код числа в формате с плавающей запятой по стандарту ieee 754.
- •13Как получить число по его коду в формате с плавающей запятой по стандарту ieee 754
- •14Как выполняется сложение чисел в формате с плавающей запятой по стандарту ieee 754?
- •15Пояснить сущность контроля работы цифровых автоматов по четности, по нечетности
- •16Пояснить сущность контроля работы цифровых автоматов по Хеммингу. Коды Хэмминга.
3Назовите алфавит двоичной, восьмеричной и шестнадцатеричной систем счисления
Двоичная система счисления имеет набор цифр {0, 1}, р=2.Двоичная система счисления имеет особую значимость в информатике: внутреннее представление любой информации в компьютере является двоичным, т.е. описывается набором символов только из двух знаков 0 и 1.
Шестнадцатеричная система счисления имеет набор цифр {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F}, p = 16. Для изображения чисел в шестнадцатеричной системе счисления требуются 16 цифр. Для обозначения первых десяти цифр используются цифры десятичной системы счисления, шесть остальных — первых шесть прописных букв латинского алфавита.
В восьмеричной системе их восемь: 0,1,2,3,4,5,6,7
4Сформулируйте правила перевода чисел из одной системы счисления в другу
1011011101 = 2 + 2 + 2 + 2 + 2 + 2 + 2 =
= 512 +128 + 64 + 16 + 8 + 4 + 1 = 733
23578 = (2·83)+(3·82)+(5·81)+(7·80) = 2·512 + 3·64 + 5·8 + 7·1 = 126310
F45ED23C16 = (15·167)+(4·166)+(5·165)+(14·164)+(13·163)+(2·162)+(3·161)+(12·160) = 409985490810
5Назовите форматы записи целых и вещественных чисел в памяти эвм.
Существуют два способа представления чисел в памяти ЭВМ. Они называются так: форма с фиксированной точкой и форма с плавающей точкой. Форма с фиксированной точкой применяется к целым числам, форма с плавающей точкой — к вещественным числам (целым и дробным). Под точкой здесь подразумевается знак-разделитель целой и дробной части числа.
Целые отрицательные числа.
Разберемся, как представляются отрицательные числа. Казалось бы, для этого достаточно заменить 0 на 1 в старшем (31-м) разряде ячейки памяти. Однако реально это делается несколько сложнее. Для представления отрицательных целых чисел используется дополнительный код.
Дополнительным
кодом двоичного числа X в N-разрядной
ячейке является число, дополняющее его
до значения 2.
Получить дополнительный код можно следующим путем:
записать внутреннее представление положительного числа X;
записать обратный код этого числа заменой во всех разрядах 0 на 1 и 1 на 0;
к полученному числу прибавить 1.
Определим по этим правилам внутреннее представление числа -562810 в 32-разрядной ячейке.
00000000
00000000
00010101
1111110
11111111 |
11111111 |
11101010 |
00000011 |
11111111 |
11111111 |
11101010 |
00000100 |
Шестнадцатеричная форма результата:
FF FF ЕА 04.
Старший разряд в представлении любого отрицательного числа равен 1. Следовательно, он указывает на знак числа и поэтому называется знаковым разрядом.
Почему отрицательные числа представляются в дополнительном коде? Дело в том, что в этом случае операция вычитания двух чисел сводится к сложению с дополнительным кодом вычитаемого, и процессору достаточно уметь лишь складывать числа. В самом деле:
А - В = А + (-В).
Если значение (-В) будет иметь форму дополнительного кода, то в памяти ЭВМ получится правильный результат.
Проверим, действительно ли в ячейке памяти получится О в результате сложения числа 5628 с числом -5628 в форме дополнительного кода.
00000000 00000000 00010101 11111100 + 11111111 11111111 11101010 000000100 =
1 00000000 00000000 00000000 00000000
Что и требовалось доказать! Единица в старшем разряде, получаемая при сложении, выходит за границу разрядной сетки машинного слова и исчезает.
Двоичное 32-разрядное число 231 является «отрицательным самому себе». Получим его дополнительный код:
Определим по этим правилам внутреннее представление числа -562810 в 32-разрядной ячейке.
10000000
00000000
00000000
00000000
01111111 |
11111111 |
11111111 |
11111111 |
10000000 |
00000000 |
00000000 |
00000000 |
Полученный код используется для представления значения
-231 = -2147483648.
Следовательно, диапазон представления целых чисел в 32-разрядном машинном слове:
-231 <= Х <= 231-1,
или
-2147483648 <= Х <= 2147483647.
В общем случае для N-разрядного машинного слова этот диапазон такой:
-2N-1 <= X <= 2N-1-1.
В современных компьютерах часто используется 16- разрядное представление целых чисел. В этом случае их диапазон следующий:
-215 <= Х <= 215-1,
или
-32768 <= Х <= 32767.
Выход результатов вычислений за границы допустимого диапазона называется переполнением. Переполнение при вычислениях с фиксированной точкой не вызывает прерывания работы процессора. Машина продолжает считать, но результаты могут оказаться неправильными.
Вещественные числа. Числовые величины, которые могут принимать любые значения (целые и дробные) называются вещественными числами. В математике также используется термин «действительные числа». Решение большинства математических задач сводится к вычислениям с веществен-ными числами. Как же такие числа представляются в памяти компьютера?
Вещественные числа в памяти компьютера представляются в форме с плавающей точкой.
Форма с плавающей точкой использует представление вещественного числа R в виде произведения мантиссы m на основание системы счисления р в некоторой целой степени n, которую называют порядком:
R = m * рn
Например, число 25,324 можно записать в таком виде: 0.25324х102. Здесь m=0.25324 — мантисса, n=2 — порядок. Порядок указывает, на какое количество позиций и в каком направлении должна «переплыть», т.е. сместиться десятичная точка в мантиссе. Отсюда название «плавающая точка».
Однако справедливы и следующие равенства:
25,324 = 2,5324*101 = 0,0025324*104 = 2532,4*102 и т.п.
Получается, что представление числа в форме с плавающей точкой неоднозначно? Чтобы не было неоднозначности, в ЭВМ используют нормализованное представление числа в форме с плавающей точкой. Мантисса в нормализован-ном представлении должна удовлетворять условию:
0,1p <= m < 1p.
Иначе говоря, мантисса меньше единицы и первая значащая цифра — не ноль. Значит для рассмотренного числа нормализованным представлением будет: 0.25324 * 102. В разных типах ЭВМ применяются различные варианты представления чисел в форме с плавающей точкой. Для примера рассмотрим один из возможных. Пусть в памяти компьютера вещественное число представляется в форме с плавающей точкой в двоичной системе счисления (р=2) и занимает ячейку размером 4 байта. В ячейке должна содержаться следующая информация о числе: знак числа, порядок и значащие цифры мантиссы. Вот как эта информация располагается в ячейке:
± машинный порядок |
М А |
Н Т И С |
С А |
1-й байт 2-й байт 3-й байт 4-й байт
В старшем бите 1-го байта хранится знак числа. В этом разряде 0 обозначает плюс, 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 единицы и имеет только положительные значения. При выполнении вычислений с плавающей точкой процессор это смещение учитывает.
Полученная формула записана в десятичной системе. Поскольку 6410=4016 (проверьте!), то в шестнадцатеричной системе формула примет вид:
Мр16 = р16 + 4016
И, наконец, в двоичной системе:
Мр2 = р2+100 00002
Теперь мы можем записать внутреннее представление числа 25,324 в форме с плавающей точкой.
Переведем его в двоичную систему счисления с 24 значащими цифрами.
25,32410= 11001,01010010111100011012
Запишем в форме нормализованного двоичного числа с плавающей точкой:
0,110010101001011110001101*10101
Здесь мантисса, основание системы счисления (210=102) и порядок (510=1012)записаны в двоичной системе.
Вычислим машинный порядок.
Мр2 = 101 + 100 0000 = 100 0101
Запишем представление числа в ячейке памяти.
01000101 |
11001010 |
10010111 |
10001101 |
Это и есть искомый результат. Его можно переписать в более компактной шестнадцатеричной форме:
45 |
CA |
97 |
8D |
Для того, чтобы получить внутреннее представление отрицательного числа -25,324,достаточно в полученном выше коде заменить в разряде знака числа 0 на 1.
Получим:
11000101 |
11001010 |
10010111 |
10001101 |
А в шестнадцатеричной форме:
C5 |
CA |
97 |
8D |
Никакого инвертирования, как для отрицательных чисел с фиксированной точкой, здесь не происходит.
Рассмотрим, наконец, вопрос о диапазоне чисел, представимых в форме с плавающей точкой. Очевидно, положительные и отрицательные числа расположены симметрично относительно нуля. Следовательно, максимальное и минимальное числа равны между собой по модулю: Rmax = |Rmin|. Наименьшее по абсолютной величине число равно нулю. Чему же равно Rmax? Это число с самой большой мантиссой и самым большим порядком:
0,111111111111111111111111*1021111111
Если перевести в десятичную систему, то получится
Rmax = (1 - 2-24) * 264 = 1019
Очевидно, что диапазон вещественных чисел значительно шире диапазона целых чисел. Если в результате вычислений получается число по модулю большее, чем Rmax, то происходит прерывание работы процессора. Такая ситуация называется переполнением при вычислениях с плавающей точкой. Наименьшее по модулю ненулевое значение равно:
(1/2) * 2-64=2-66.
Любые значения, меньшие данного по абсолютной величине, воспринимаются процессором как нулевые.
Как известно из математики, множество действительных чисел бесконечно и непрерывно. Множество же вещественных чисел, представимых в памяти ЭВМ в форме с плавающей точкой, является ограниченным и дискретным. Каждое следующее значение получается прибавлением к мантиссе предыдущего единицы в последнем (24-м) разряде. Количество вещественных чисел, точно представимых в па-мяти машины, вычисляется по формуле:
N = 2t * ( U - L+ 1) + 1.
Здесь t — количество двоичных разрядов мантиссы; U — максимальное значение математического порядка; L — минимальное значение порядка. Для рассмотренного нами варианта (t = 24, U = 63, L = -64) получается:
N = 2 146 683 548.
Все же остальные числа, не попадающие в это множество, но находящиеся в диапазоне допустимых значений, представляются в памяти приближенно (мантисса обрезается на 24-м разряде). А поскольку числа имеют погрешности, то и результаты вычислений с этими числами также будут содержать погрешность. Из сказанного следует вывод: вычисления с вещественными числами в компьютере выполняются приближенно.
6Назовите правила построение прямого, обратного, дополнительного и модифицированного кодов +++++
Прямым кодом отрицательного числа называется его изображение в естественной форме записи, у которого в знаковом разряде ставится 1. Прямой код положительного двоичного числа совпадает с его обычным изображением в естественной форме, так как знак кодируется нулем.
Согласно определению,
функция кодирования чисел в прямом коде
правильных дробей вида: А=азн
a-1
a-2...
а-n
запишется
следующим образом:
Величина А будет определяться в прямом коде следующим выражением:
при этом знаковому разряду не приписывается никакого веса. Очевидно, что диапазон изменения машинных изображений для прямого кода двоичной дроби лежит в пределах:
.
В геометрической интерпретации область положительных чисел будет совпадать с областью их изображений, а для отрицательных чисел эти области будут отличаться.
В прямом коде нуль имеет два значения: положительное 0,000..0 и отрицательное 1,000...0. Обычно в ЭВМ используется положительный нуль, но в процессе вычислений может возникнуть и его отрицательное изображение. Оба изображения полностью эквивалентны и применение любого из них не приводит к ошибке.
Пример записи числа в прямом коде:
А=+0,101011 Апр= 0,101011;
В=-0,110011 Впр=1,110011.
Сложение в прямом коде
Правила сложения чисел в прямом коде не отличаются от обычных правил сложения, т.е. если оба слагаемых имеют одинаковые знаки, то их числовые разряды складываются, а сумме присваивается знак одного из них. Если слагаемые имеют разные знаки, то из числовых разрядов большего по абсолютной величине числа вычитается меньшее, а сумме приписывается знак большего из слагаемых. При этом числовые разряды кода обрабатываются отдельно от знаковых, так как последние не имеют веса.
Рассмотрим возможные 4 случая получения суммы чисел в прямом коде.
1) А›0, В›0, С›0.
А=+0,101001 В=+0,000101
Апр=0,101001 Впр=0,000101 Спр=А+В
+0,101001
0,000101
0,101110
2) А›0, В‹0, С›0.
А=+0,101001 В=-0,000101
Апр=0,101001 Впр=1,000101 Спр=А-|В|
-0,101001
1,000101
0,100100
3) А‹0, В›0, С‹0.
А=-0,101001 В=+0,000101
Апр=1,101001 Впр=0,000101 Спр=1+(|А|-|В|)
-0,101001
0,000101
0,100100 Спр=1+0,100100=1,100100
4) А‹0, В‹0, С‹0.
А=-0,101001 В=-0,000101
Апр=1,101001 Впр=1,000101 Спр=1+|А|+|В|
+0,101001
0,000101
0,101110 Спр=1+ 0,101110=1,101110
Таким образом, в прямом коде знаковый разряд и цифровую часть нельзя рассматривать как единое целое. Кроме того, необходимо кроме сумматора иметь и вычитатель. В результате этого прямой код не применяется для выполнения операции алгебраического сложения, но применяется для выполнения операций умножения и деления.
