среда, 24 сентября 2014 г.

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

Целые числа в компьютере

Вся информация, обрабатываемая современными компьютерами, хранится в них в двоичном виде. Каждый элемент ячейки служит для изображения одного разряда двоичного числа. Именно поэтому каждый элемент ячейки называют разрядом.
Способы представления: 

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

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

Чтобы получить представление целого положительного числа в компьютере, это число необходимо перевести в двоичную систему счисления. Если двоичное число состоит не более чем из k цифр, то это число можно записать в k-разрядной ячейке памяти, дополнив нулями слева до k разрядов.

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




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

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

Для k-разрядной ячейки дополнительный код отрицательного числа можно получить следующим образом:


  • Модуль числа представляется прямым кодом в k разрядах.
  • В прямом коде все нули заменяются на единицы, а единицы – на нули. Таким образом получаем обратный код.
  • К полученному обратному коду прибавляется единица.


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

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


Перечисление целых знаковых чисел

Расположим целые знаковые числа, которые можно записать в 8-разрядах, в порядке возрастания на числовой оси:

Если мы хотим прибавить к какому-либо числу единицу, то сдвигаемся по этой оси вправо.

Если мы хотим отнять от какого-либо числа единицу, то сдвигаемся влево.

В k-разрядной компьютерной арифметике все целые числа расположены по кольцу, причем рядом с максимальным расположено минимальное в конкретном представлении.



В связи с тем, что количество чисел, которые могут быть представлены в k разрядах, ограничено, при выполнении арифметических действий в целочисленной k-разрядной арифметике могут возникнуть следующие ситуации:

  • Старшие цифры результата могут выйти за пределы отведенных разрядов и будут утеряны.
  • При сложении или умножении двух положительных знаковых чисел можно получить отрицательное число.
Это произойдет в том случае, если в результате вычисления в знаковом бите окажется единица. Подобные ситуации могут привести к неверному результату при выполнении верных алгоритмов. Поэтому об этих особенностях всегда нужно помнить при программировании.

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

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