Вся информация, обрабатываемая современными компьютерами, хранится в них в
двоичном виде. Каждый элемент ячейки служит для
изображения одного разряда двоичного числа. Именно поэтому каждый элемент ячейки
называют
разрядом.
Способы представления:
- Беззнаковое используют только для неотрицательных целых чисел
- Знаковое используют для отрицательных и положительных чисел
Беззнаковое представление целых положительных чисел в компьютере
Чтобы получить
представление целого положительного числа в компьютере, это число
необходимо перевести в двоичную систему счисления. Если двоичное число состоит
не более чем из
k цифр, то это число можно записать в
k-разрядной ячейке памяти, дополнив нулями слева до
k
разрядов.
Знаковое представление целых чисел в компьютере
При знаковом представлении чисел 0 в самом левом разряде
ячейки соответствует знаку плюс, а единица – знаку минус. Такое представление чисел называется
прямым кодом.
Однако для представления отрицательных чисел в компьютере
используется
дополнительный код.
- количество представимых чисел в k разрядах ограничено и
зависит от k;
- диапазон знаковых чисел, представимых в k-разрядной ячейке,
не симметричен относительно 0.
Алгоритм построения дополнительного кода
Для
k-разрядной ячейки дополнительный код
отрицательного числа можно получить следующим образом:
- Модуль числа представляется прямым кодом в k разрядах.
- В прямом коде все нули заменяются на единицы, а единицы – на нули. Таким
образом получаем обратный код.
- К полученному обратному коду прибавляется единица.
Иногда требуется по имеющемуся дополнительному коду числа восстановить
исходное число. Модуль искомого числа в таком случае можно получить двумя
способами:
- Провести обратную цепочку преобразований: вычесть единицу из дополнительного
кода числа, инвертировать полученный результат и перевести его в десятичную
систему счисления.
- Построить дополнительный код для имеющегося дополнительного кода и перевести
результат в десятичную систему счисления.
Перечисление целых знаковых чисел
Расположим целые знаковые числа, которые можно записать в 8-разрядах, в
порядке возрастания на числовой оси:
Если мы хотим прибавить к какому-либо числу единицу, то сдвигаемся по этой
оси вправо.
Если мы хотим отнять от какого-либо числа единицу, то сдвигаемся влево.
/%D0%9E%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5%20%D0%BA%D0%BE%D0%BC%D0%BF%D0%BB%D0%B5%D0%BA%D1%81%D1%8B/%D0%98%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0,%2010%20%D0%BA%D0%BB/E4HOME_INFORM_10/data/res/DL_RES_F9FEA629-0744-4FEA-B19F-3B20485D3005/Images/2.9.7_3.png)
В
k-разрядной компьютерной арифметике все целые числа расположены по
кольцу, причем рядом с максимальным расположено минимальное в конкретном
представлении.
В связи с тем, что количество чисел, которые могут быть представлены в
k разрядах, ограничено, при выполнении арифметических действий в
целочисленной
k-разрядной арифметике могут возникнуть следующие
ситуации:
- Старшие цифры результата могут выйти за пределы
отведенных разрядов и будут утеряны.
- При сложении или умножении двух положительных
знаковых чисел можно получить отрицательное число.
Это произойдет в том случае, если в результате вычисления в знаковом бите
окажется единица. Подобные ситуации могут привести к неверному результату при
выполнении верных алгоритмов. Поэтому об этих особенностях всегда нужно помнить
при программировании.