Вы должны думать о них как о бесконечно большом количестве 1 бита. В абстрактном виде, двоичное дополнение двоичное представление имеет бесконечно много единиц; не то, чтобы больше 1 можно было добавлять по мере необходимости, но эти 1 с уже являются частью представления числа.
Тот факт, что эти бесконечно много битов на самом деле не хранятся в памяти, подробности реализации, поэтому, когда вы думаете об этом, вы должны игнорировать ограничения памяти, пока не окажетесь в ситуации, когда вы - это тот, кто должен написать реализацию. Если вы просто пытаетесь понять это концептуально, вам не нужно думать о таких вещах, как запасные биты, и я не думаю, что это обязательно поможет.
Двоичное число представляет собой сумму степени 2, например:
11001 2 = 2 4 + 2 3 + 0 + 0 + 2 0
Число -1 представлено бесконечной последовательностью 1 с, простирающейся бесконечно далеко влево:
... 1111 2 = ... + 2 3 + 2 2 + 2 1 + 2 0
Это бессмыслица в обычном смысле бесконечного ряда, но есть веские причины определять результат как -1. Наиболее интуитивно привлекательной причиной является то, что происходит, когда вы добавляете 1 к нему, следуя алгоритму сложения:
...111111111
+ 1
――――――――――――
= ...000000000 (result)
――――――――――――
...11111111 (carry)
В самом правом столбце у вас есть 1 + 1, который равен 2, или 10 2 в двоичном виде, поэтому вы пишете 0 и переносите 1 в следующий столбец слева. Затем в этом столбце у вас есть 1 плюс переносимая 1, поэтому вы пишете 0 и переносите еще 1 ... и т. Д., ad infinitum . Результат имеет 0 в каждой позиции. Следовательно, ... 11111 2 должно было представлять -1, потому что мы следовали алгоритму, чтобы добавить 1, и мы получили представление 0.
Если этого недостаточно, то есть другие причины того, что ... 11111 2 следует интерпретировать как представление -1:
- Бесконечная сумма 1 + 2 + 4 + 8 + ... является геометрия c серия; формула для ряда геометрии c с постоянным отношением r равна 1 / (1 - r). Эта формула применяется только когда -1
- Бесконечная сумма 1 + 2 + 4 + 8 + .. на самом деле действительно сходится к -1 в 2-adi c норма .
- Результат -1 также может быть получен с помощью других определений, включая Суммирование Эйлера и , как отмечено в Википедии , любой метод суммирования, который является стабильным и линейным , связывает эту сумму с результатом ∞ или -1.
Я упоминаю об этом также потому, что они подразумевают, что определенные свойства все еще сохраняются в арифметике; применение обычных алгоритмов сложения, вычитания и умножения «до бесконечности» дает ощутимые результаты, подчиняющиеся обычным свойствам арифметики c, таким как ассоциативность, коммутативность и дистрибутивность.