Представление чисел в компьютере. Целые числа и их компьютерный код
Целые числа в компьютере
Беззнаковое представление положительных целых чисел в компьютере
Так как в компьютере все данные хранятся в двоичном виде, то чтобы получить
представление целого положительного числа в компьютере, сначала это число
необходимо перевести в двоичную систему счисления. Если двоичное число состоит
не более чем из k цифр, то это число можно записать в k-разрядной ячейке памяти, дополнив нулями слева до k
разрядов.
Запишем максимальные числа, которые можно вместить в 8, 16, 32 разрядах.
Количество разрядов | Максимальное число |
8 | 28 – 1 = 255 |
16 | 216 – 1 = 65535 |
32 | 232 – 1 = 4294967295 |
Знаковое представление целых чисел в компьютере
Для человека привычна запись числа в виде «знак-величина». Чтобы и в компьютере представлять числа в привычном для человека виде, необходимо самый левый разряд ячейки отвести для записи знака числа. При записи положительного числа в самый левый разряд ячейки, который называется знаковым, записывается 0, при записи отрицательного числа
- количество представимых чисел в k разрядах ограничено и зависит от k;
- диапазон знаковых чисел, представимых в k-разрядной ячейке, не симметричен относительно 0.
Количество разрядов | Минимальное число | Максимальное число |
8 | –27 = –128 | 27 – 1 = 127 |
16 | –215 = –32768 | 215 – 1 = 32767 |
32 | –231 = –2147483648 | 231 – 1 = 2147483647 |
Алгоритм построения дополнительного кода
В k-разрядной целочисленной компьютерной арифметике 2k = 0, так как единица в самом старшем разряде числа 2k должна стоять в k+1 разряде и следовательно, «выползает» за границы ячейки. Дополнительный код отрицательного числа, записанный в k-разрядной ячейке, заменяет это отрицательное число на дополнение его модуля до числа 2k. То есть дополнительный код отрицательного числа m равен 2k – |m|. Такая замена позволяет заменить операцию вычитания чисел на операцию сложения. Действительно, если в 8-разрядной ячейке сложить числа 5 и –6, где вместо –6 написано число (28 – 6), то получится 5 + (28 – 6) = 28 – 1, что будет соответствовать записи числа –1.
Поэтому для k-разрядной ячейки дополнительный код отрицательного числа можно получить следующим образом:
- Модуль числа представляется прямым кодом в k разрядах.
- В прямом коде все нули заменяются на единицы, а единицы – на нули. Таким образом получаем обратный код.
- К полученному обратному коду прибавляется единица.
Алгоритм получения числа по дополнительному коду
Иногда требуется по имеющемуся дополнительному коду числа восстановить исходное число. Модуль искомого числа в таком случае можно получить двумя способами:
- Провести обратную цепочку преобразований: вычесть единицу из дополнительного кода числа, инвертировать полученный результат и перевести его в десятичную систему счисления.
- Построить дополнительный код для имеющегося дополнительного кода и перевести результат в десятичную систему счисления.
Особенности целочисленной компьютерной арифметики
В связи с тем, что количество чисел, которые могут быть представлены в k разрядах, ограничено, при выполнении арифметических действий в целочисленной k-разрядной арифметике могут возникнуть следующие ситуации:
- Старшие цифры результата могут выйти за пределы отведенных разрядов и будут утеряны.
- При сложении или умножении двух положительных знаковых чисел можно получить отрицательное число.
Это произойдет в том случае, если в результате вычисления в знаковом бите окажется единица. Подобные ситуации могут привести к неверному результату при выполнении верных алгоритмов. Поэтому об этих особенностях всегда нужно помнить при программировании.