Sadda.ru Ironetcart Андроид Ассемблер MASM32 Linux Все статьи Table of Contents


 

Отрицательные числа

  Макс Петров май 2013

      Представление отрицательных чисел в вычислительных машинах встречает определенные трудности. Положительное число обозначает счет - количество предметов или порядковый номер предмета, чего нельзя сказать об отрицательном числе. Отрицательное число, строго говоря, не имеет числового смысла, как такового, оно символизирует, скорее, будущее действие - то, что в дальнейшем из вновь появившихся у нас предметов мы должны будет вычесть еще несколько.

      Логичное и изящное решение состоит в том, чтобы отрицательные числа сопоставить с пустыми ячейками в чем-либо. Допустим, есть набор счетных палочек, стандартное число палочек в наборе известно. Тогда, после совершения каких-либо действий над этим набором оставшиеся в наборе палочки будут обозначать положительное число, пустые ячейки - отрицательное число. Легко видеть, что при таком подходе любое количество палочек в наборе символизирует сразу два числа - и положительное, и отрицательное. В зависимости от того, как мы условимся, одно из этих чисел будет явным, другое - предполагаемым.

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

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

      Именно так видит числа процессор, в чем несложно убедиться. Например, будем вычитать в цикле из байтовой переменной на каждом шаге единицу. Когда значение переменной достигнет нуля, следующим вычитанием мы получим в переменной значение 255 - максимальное число, которое может быть записано в байт. Последовательным вычитанием число 255 опять будет уменьшено до нуля, при вычитании из нуля единицы снова получим 255, и так будет продолжаться сколь угодно долго, если мы не остановим программу.

      Подобный принцип работы с числами хорошо согласуется с особенностями вычислительных машин. Ячейки (байты, слова, двойные слова и т.д.), в которых компьютер хранит числа - конечны. Кроме того, подобный принцип обеспечивает легкое выполнение арифметических операций - вычитание можно заменить сложением, если инвертировать вычитаемое число. Например, для байта, т.е. набора в 256 счетных палочек (256 равно нулю):
      10 - 1 = 10 + 255 = 9
Вообще, решением будет 265, но из них 256 должны исчезнуть (256 - это единица в следующем байте), а 9 останется, то есть компьютер получит правильный результат.

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

     


Добавить комментарий

E-mail:
*


Контрольные цифры:



Ассемблер MASM32

      Простейшая программа на ассемблере (beeper)
      Переменные и типы данных ассемблера
      Регистры процессора IA32
      Консоль ввода-вывода
      API-функция CharToOem и строки ассемблера
      API-функция ReadConsoleInput
      API-функция PeekConsoleInput
      События консоли (таблица)
      Системы счисления, тэги ассемблера, перевод чисел
      Отрицательные числа
      Инкремент и декремент
      Деление (DIV, IDIV)
      VKDEBUG
      Макросы ассемблера
      Воспоминание об Альгамбре на системном динамике
      Командная строка
      Пузырьковая сортировка. Эстафета шариков
      Сортировка расческой
      Быстрая сортировка

     


© Max Petrov При использовании материалов ссылка на sadda.ru обязательна