Понимание собственного дополнения

У меня просто небольшой вопрос относительно дополнения к двоичным числам, который, возможно, кто-то может помочь мне понять.

Я готовлюсь к тесту по компьютерной безопасности и практикую преобразование десятичных чисел в двоичные, а затем использую дополнение до единицы и до двух. Мне дали десятичное число 237 и преобразовали его в 11101101 в двоичном формате. Я понимаю, что в дополнении вы меняете местами биты, и это просто. Когда я перевернул его, я получил 00010010, но ответ не включает первые три нуля. Есть ли шанс, что кто-нибудь может объяснить мне, почему это так?


person Cory Freeman    schedule 07.02.2019    source источник


Ответы (2)


Значение 237 слишком велико для хранения в одном 8-битном байте со знаком с дополнением до единицы. Если бы вместо этого он был сохранен в 16-битном int, он и его дополнительные отрицания имели бы соответствующие представления в базе 2:

0000000011101100

1111111100010011

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

person Govind Parmar    schedule 07.02.2019
comment
Все еще немного запутался, это потому, что 237 больше, чем 2 ^ 7? Кроме того, почему вынуть 3 нуля, а не только 1? - person Cory Freeman; 07.02.2019
comment
Например, если бы это было 200, я бы включил только 6 цифр. Просто пытаюсь понять, где обрыв. - person Cory Freeman; 07.02.2019
comment
Да, если тип данных, содержащий его, имеет N бит, то для величины числа доступно не более N-1 бит. - person Govind Parmar; 07.02.2019

Те ведущие 0 не имеют никакого значения. По сути, в десятичном виде можно сказать 07 == 7 == 00000000007, поэтому в двоичном формате равно 00010010 == 10010 == 0000000000000010010.

person Bart Van Loon    schedule 13.07.2019