
- •«Кодирование и обработка числовой информации» Системы счисления
- •Числа и счёт в Древнем Египте
- •Старорусская система счисления
- •Римская система счисления
- •Славянский цифровой алфавит
- •Вавилонская система счисления
- •Интересные факты
- •Перевод чисел из одной системы счисления в другую систему счисления
- •Арифметические операции в двоичной системе счисления
- •1. Что такое двоичная, десятичная и, вообще, позиционная система счисления.
- •2. Сложение в двоичной системе счисления
- •3. Вычитание в двоичной системе счисления
- •4. Умножение и деление в двоичной системе счисления
- •Представление чисел в компьютере
- •Числа в памяти компьютера
Представление чисел в компьютере
Обычно входные и выходные данные представляются в форме, удобной для
человека. Числа люди привыкли изображать в десятичной системе счисления. Длякомпьютера удобнее двоичная система. Это объясняется тем, что технически гораздопроще реализовать устройства (например, запоминающий элемент) с двумя, а не сдесятью устойчивыми состояниями (есть электрический ток — нет тока, намагничен —не намагничен и т.п.). Можно считать, что одно из двух состояний означает единицу,другое — ноль.
Любые данные (числа, символы, графические и звуковые образы) в компьютере представляются в виде последовательностей из нулей и единиц. Эти последовательности можно считать словами в алфавите {0,1}, так что обработку данных внутри компьютера можно воспринимать как преобразование слов из нулей и единиц по правилам, зафиксированным в микросхемах процессора. Такой взгляд роднит вычислительные машины с абстрактными вычислителями. Вспомните машины Тьюринга или нормальные алгоритмы Маркова. Элемент последовательности из нулей и единиц (член такой последовательности) называют битом. Именительный падеж — бит.
Отображение внешней информации во внутреннее представление называется
кодированием. Кодом ( франц. code, от лат. codex — свод законов) называют как сам способ отображения, так и множество слов (кодовых комбинаций), используемых при кодировании.
Числа в памяти компьютера
Существуют два способа представления чисел в памяти ЭВМ. Они называются так: форма с фиксированной точкой и форма с плавающей точкой. Форма с фиксированной точкой применяется к целым числам, форма с плавающей точкой — к вещественным числам (целым и дробным). Под точкой здесь подразумевается знак-разделитель целой и дробной части числа.
Целые отрицательные числа.
Разберемся, как представляются отрицательные числа. Казалось бы, для этого достаточно заменить 0 на 1 в старшем (31-м) разряде ячейки памяти. Однако реально это делается несколько сложнее. Для представления отрицательных целых чисел используется дополнительный код.
Дополнительным кодом двоичного числа X в N-разрядной ячейке является число, дополняющее его до значения 2.
Получить дополнительный код можно следующим путем:
записать внутреннее представление положительного числа X;
записать обратный код этого числа заменой во всех разрядах 0 на 1 и 1 на 0;
к полученному числу прибавить 1.
Определим по этим правилам внутреннее представление числа -562810 в 32-разрядной ячейке.
1 |
00000000 |
00000000 |
00010101 |
1111110 |
2 |
11111111 |
11111111 |
11101010 |
00000011 |
3 |
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-разрядной ячейке.
1 |
10000000 |
00000000 |
00000000 |
00000000 |
2 |
01111111 |
11111111 |
11111111 |
11111111 |
3 |
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 в форме с плавающей точкой.
1. Переведем его в двоичную систему счисления с 24 значащими цифрами.
25,32410= 11001,01010010111100011012
2. Запишем в форме нормализованного двоичного числа с плавающей точкой:
0,110010101001011110001101*10101
Здесь мантисса, основание системы счисления (210=102) и порядок (510=1012)записаны в двоичной системе.
3. Вычислим машинный порядок.
Мр2 = 101 + 100 0000 = 100 0101
4. Запишем представление числа в ячейке памяти.
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-м разряде). А поскольку числа имеют погрешности, то и результаты вычислений с этими числами также будут содержать погрешность. Из сказанного следует вывод: вычисления с вещественными числами в компьютере выполняются приближенно.
Презентация: http://www.slideshare.net/Moravskiy/ss-9083291
Источники информации
http://7sch.ucoz.ru/index/puteshestvie_v_istoriju_chisel_sistemy_schislenija/0-147
http://uchebnik1.narod.ru/chislo.html
http://www.slideshare.net/Moravskiy/ss-9083291