вторник, 16 сентября 2014 г.

Представление чисел в компьютере. Целые числа и их компьютерный код

Беззнаковое представление положительных целых чисел в компьютере

 Так как в компьютере все данные хранятся в двоичном виде, то чтобы получить представление целого положительного числа в компьютере, сначала это число необходимо перевести в двоичную систему счисления. Если двоичное число состоит не более чем из k цифр, то это число можно записать в k-разрядной ячейке памяти, дополнив нулями слева до k разрядов.
Очевидно, что самое большое целое положительное число, которое мы можем записать в k разрядах, состоит из единиц во всех разрядах ячейки. Если перевести это число в десятичную систему счисления, то оно равно 2k – 1. Минимальное число состоит из нулей во всех разрядах и равно 0.

Знаковое представление целых чисел в компьютере

При записи положительного числа в самый левый разряд ячейки, который называется знаковым, записывается 0, при записи отрицательного числа 1. То есть при знаковом представлении чисел 0 в самом левом разряде ячейки соответствует знаку плюс, а единица – знаку минус. Очевидно, что модуль числа можно записывать только в оставшихся k – 1 разрядах. Такое представление чисел называется прямым кодом.
Прямой код положительного числа отличается от прямого кода такого же по модуля отрицательного числа только содержанием знакового разряда. Однако для представления отрицательных чисел в компьютере используется дополнительный код.

Алгоритм построения дополнительного кода

 В k-разрядной целочисленной компьютерной арифметике 2k = 0, так как единица в самом старшем разряде числа 2k должна стоять в k+1 разряде и следовательно, «выползает» за границы ячейки. Дополнительный код отрицательного числа, записанный в k-разрядной ячейке, заменяет это отрицательное число на дополнение его модуля до числа 2k. То есть дополнительный код отрицательного числа m равен 2k – |m|. Такая замена позволяет заменить операцию вычитания чисел на операцию сложения. Действительно, если в 8-разрядной ячейке сложить числа 5 и –6, где вместо –6 написано число (28 – 6), то получится 5 + (28 – 6) = 28 – 1, что будет соответствовать записи числа –1.
Поэтому для k-разрядной ячейки дополнительный код отрицательного числа можно получить следующим образом:
1) Модуль числа представляется прямым кодом в k разрядах.
2) В прямом коде все нули заменяются на единицы, а единицы – на нули. Таким образом получаем обратный код.
3) К полученному обратному коду прибавляется единица.  

Алгоритм получения числа по дополнительному коду

Иногда требуется по имеющемуся дополнительному коду числа восстановить исходное число.

Модуль искомого числа в таком случае можно получить двумя способами:
1) Провести обратную цепочку преобразований: вычесть единицу из дополнительного кода числа, инвертировать полученный результат и перевести его в десятичную систему счисления.
2) Построить дополнительный код для имеющегося дополнительного кода и перевести результат в десятичную систему счисления. 

Комментариев нет:

Отправить комментарий