- •Алгоритмические языки и программирование позиционная Система счисления
- •Брянск 2007
- •Цель работы
- •Теоретическая часть
- •2.1. Позиционные системы счисления
- •2.2. Компьютерное представление целых чисел
- •2.2.1. Прямой код числа
- •2.2.2. Дополнительный код числа
- •2.3. Компьютерное представление вещественных чисел
- •2.3.1. Нормализованная запись числа
- •2.3.2. Представление чисел с плавающей запятой
- •2.4. Арифметические операции над числами
- •2.4.1. Сложение и вычитание
- •2.5. Алгоритмы перевода чисел из одной позиционной системы счисления в другую
- •Порядок выполнения работы
- •Список заданий
- •Контрольные вопросы
- •Список рекомендуемой литературы
- •Дополнительная литература
2.2. Компьютерное представление целых чисел
Целые числа являются простейшими числовыми данными, с которыми оперируют ЭВМ. Для целых чисел существуют два представления: беззнаковое (только для неотрицательных целых чисел) и со знаком.
Для беззнакового представления все разряды ячейки отводятся под представление самого числа. Для представления со знаком самый старший (левый разряд) отводится под знак числа, а остальные разряды – под само число. Если число положительное, то в знаковый разряд помещается 0, если число отрицательное – 1.
2.2.1. Прямой код числа
Представление числа в привычной форме «знак» - «величина», при которой старший разряд ячейки отводится под знак, а остальные разряды ячейки – под запись числа в двоичной системе, называется прямым кодом двоичного числа. Например, прямой код двоичных чисел 10012 и -10012 для 8-разрядной ячейки равен 00001001 и 10001001 соответственно.
Положительные числа в ЭВМ всегда представляются с помощью прямого кода. Прямой код отрицательного числа отличается от прямого кода соответствующего положительного числа лишь содержимым знакового разряда. Но отрицательные целые числа не представляются в ЭВМ с помощью прямого кода, для их представления используют так называемый дополнительный код.
2.2.2. Дополнительный код числа
Дополнительный код используется для упрощения выполнения арифметических операций. Если бы вычислительная машина работала с прямыми кодами положительных и отрицательных чисел, то при выполнении арифметических операций следовало бы выполнять ряд дополнительных действий. Например, при сложении нужно проверять знаки обоих операндов и определять знак результата. Если знаки одинаковые, то вычисляется сумма операндов и ей присваивается тот же знак. Если знаки разные, то из большего по абсолютной величине числа вычитается меньшее и результату присваивается знак большего числа. То есть при таком представлении чисел (в виде только прямого кода) операция сложения реализуется через достаточно сложный алгоритм. Если же отрицательные числа представлять в виде дополнительного кода, то операция сложения, в том числе и чисел разного знака, сводится к их поразрядному сложению.
Дополнительный код отрицательного числа m равен , где k- количество разрядов в ячейке. Дополнительный код отрицательного числа – это дополнение до .
Как уже было изложено, при представлении неотрицательных чисел в беззнаковом формате все разряды ячейки отводятся под само число. Например, запись десятичного числа 24310 в одном байте (машинное представление числа) при беззнаковом представлении будет выглядеть следующим образом:
1 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
При представлении целых чисел со знаком самый старший (левый) разряд отводится под знак числа, и под собственно число остается на один разряд меньше. Поэтому, если приведенное состояние ячейки рассматривать как запись целого числа со знаком, то для компьютера в этой ячейке записано -13 (243+13=256=28).
Алгоритм получения дополнительного k-разрядного кода отрицательного числа можно представить в следующем виде:
-
модуль числа представить прямым кодом в k двоичных разрядах;
-
значения всех бит инвертировать: все нули заменить на единицы, а единицы на нули (таким образом получается k-разрядный обратный код исходного числа);
-
к полученному обратному коду прибавить единицу.
Воспользуемся приведенным алгоритмом для получения дополнительного кода числа -52 в восьмиразрядной ячейки памяти.
В двоичной системе счисления модуль числа -52 будет иметь вид 00110100. Получим обратный код данного числа, для этого необходимо инвертировать исходное число, обратный код будет иметь вид 11001011. Для получения дополнительного кода необходимо к числу, записанному в обратном коде, прибавить единицу, число 11001100 и будет являться дополнительным кодом исходного числа.