|
Представление целых чисел |
|
Для представления чисел в памяти компьютера используются два формата: формат с фиксированной точкой и формат с плавающей точкой. В формате с фиксированной точкой представляются только целые числа, в формате с плавающей точкой - вещественные числа (целые и дробные).
Целые числа
Целые числа являются простейшими числовыми данными, с которыми оперируют ЭВМ. Для целых чисел существуют два представления: беззнаковое (только для неотрицательных целых чисел) и со знаком. Очевидно, что отрицательные числа можно представлять только в знаковом виде. Целые числа в компьютере хранятся в формате с фиксированной запятой.
Множество целых чисел, представимых в памяти ЭВМ, ограничено. Диапазон значений зависит от размера ячеек памяти, используемых для их хранения. Максимальное значение целого неотрицательного числа достигается в случае, когда во всех ячейках хранятся единицы. Для k-разрядного представления оно будет равно: 2k - 1
1 байт: 111111112 = 25510
2 байта: 11111111111111112 = 6553510
В k-разрядной ячейке может храниться 2k различных значений целых чисел.
Для беззнакового представления все разряды ячейки отводятся под представление самого числа. Для представления со знаком самый старший (левый) разряд отводится под знак числа, остальные разряды - под само число. Если число положительное, то в знаковый разряд помещается 0, если число отрицательное - 1.
Пример 1. Пусть для представления целых чисел в компьютере используется 16-разрядная ячейка (2 байта). Определить, каков диапазон хранимых чисел, если:
а) хранятся неотрицательные числа;
б) хранятся как положительные так и отрицательные числа.
Решение. Всего в 16-разрядной ячейке может храниться одно из 216=65536 различных значений. Следовательно двухбайтовая ячейка может хранить число:
а) от 0 до 65535 (от 0 до 2k-1) для неотрицательных чисел
б) от -32768 до 32767 (от -2k-1 до 2k-1-1) для чисел со знаком (k-1, т.к. один разряд отводится под знак числа).
Чтобы получить внутреннее представление целого положительного числа N, хранящегося в k-разрядном машинном слове, необходимо:
1) перевести число N в двоичную систему счисления;
2) полученный результат дополнить слева незначащими нулями до k разрядов.
Пример 2. Получить внутреннее представление целого числа 1607 в 2-х байтовой ячейке.
Решение. N = 160710 = 110010001112. Внутреннее представление этого числа в ячейке будет следующим: 0000 0110 0100 0111. Шестнадцатеричная форма внутреннего представления числа получается заменой 4-х двоичных цифр одной шестнадцатеричной цифрой: 0647.
Прямой код числа
Представление числа в привычной форме «знак»-«величина», при которой старший разряд ячейки отводится под знак, а остальные разряды ячейки - под запись числа в двоичной системе, называется прямым кодом двоичного числа.
Например, прямой код двоичных чисел 10012 и -10012 для 8-разрядной ячейки равен 00001001 и 10001001 соответственно.
Положительные числа в ЭВМ всегда представляются с помощью прямого кода. Прямой код отрицательного числа отличается от прямого кода соответствующего положительного числа содержимым знакового разряда. Но отрицательные целые числа представляются в ЭВМ с помощью так называемого дополнительного кода.
Дополнительный код отрицательного числа m равен 2k - |m|, где k - количество разрядов в ячейке. В компьютерной k-разрядной арифметике 2k=0, так как двоичная запись этого числа состоит из одной единицы и k нулей, а в ячейку из k разрядов может уместиться только k цифр, в данном случае только нули. Таким образом, дополнительный код отрицательного числа - это дополнение |m| до 2k.
Для записи внутреннего представления целого отрицательного числа (-N) необходимо:
1. получить внутреннее представление положительного числа N;
2. получить обратный код этого числа заменой 0 на 1 и 1 на 0;
3. к полученному числу прибавить 1.
Данная форма представления целого отрицательного числа называется дополнительным кодом. Использование дополнительного кода позволяет заменить операцию вычитания на операцию сложения уменьшаемого числа с дополнительным кодом вычитаемого.
Пример 3. Получить внутреннее представление целого отрицательного числа -1607.
Решение.
1) Двоичное представление числа: 0000 0110 0100 0111
2) обратный код: 1111 1001 1011 1000
3) прибавить 1: 1111 1001 1011 1001
Шестнадцатеричная форма: F9B9.
Дополнительный код используется для упрощения выполнения арифметических операций. Если бы вычислительная машина работала с прямыми кодами положительных и отрицательных чисел, то при выполнении арифметических операций следовало бы выполнять ряд дополнительных действий. Например, при сложении нужно было бы проверять знаки обоих операндов и определять знак результата. Если знаки одинаковые, то вычисляется сумма операндов и ей присваивается тот же знак. Если знаки разные, то из из большего по абсолютной величине числа вычитается меньшее и результату присваивается знак большего числа. То есть при таком представлении чисел (в виде только прямого кода) операция сложения реализуется через достаточно сложный алгоритм. Если же отрицательные числа представлять в виде дополнительного кода, то операция сложения, в том числе и чисел разного знака, сводится к их поразрядному сложению.
Для компьютерного представления целых чисел обычно используется один, два или четыре байта, т.е. ячейка памяти будет состоять из восьми, шестнадцати или 32 разрядов соответственно. |
|
| |