Нужна помощь в понимании 8-битного десятичного числа со знаком с комплиментом 2

Мне нужна помощь в определении, верна моя логика или нет.

Пример вопроса

«Предполагая, что у меня есть 8-битное десятичное значение со знаком 200 в форме дополнения до двух ...»

Процесс моих мыслей

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

Таким образом, максимальное положительное значение, которое он может иметь, составляет:

2^(8-1) - 1 = 127

Сначала я был сбит с толку, потому что подумал, почему вопрос о том, что 200 может быть 8-битным и подписанным? Тогда я подумал, вот тут-то и возникает вопрос о комплиментах этих двоих.

Поскольку на самом деле это два комплимента, так оно и есть:

8-битная подпись, комплимент двойки, десятичное число = 200

Преобразовать в двоичный -> 1100 1000

Поскольку он подписан, фактический номер дополнения два ДЕЙСТВИТЕЛЬНО -56 (я бы использовал методы отрицания, чтобы инвертировать 1 и 0, а затем + 1, но для экономии времени я только что нашел конвертер в Интернете ).

Итак, мой вывод:

8-битная подпись, комплимент 2, десятичное значение 200 на самом деле -56.

Главный вопрос

Правильно ли с этим мой мыслительный процесс? Если так, то я думаю, что самая запутанная часть этого состоит в том, что я говорю моему мозгу, что одно число равно совершенно другому числу.


person A.Sharma    schedule 09.06.2015    source источник


Ответы (1)


Да, я считаю ваш анализ верным.

Чтобы немного расширить, я думаю, что формулировка вопроса неудобна, и ее лучше было бы сформулировать так: «Каково значение 1100 1000 в базе 10, где это число является числом с дополнением до двух?»

Хитрость здесь в том, чтобы думать не о том, что 200 == -56, а о том, что единственной точкой истины являются биты 11001000. Эти биты чисел сами по себе не имеют значения. У нас есть компьютер, интерпретирующий их по-разному в зависимости от программы. Таким образом, дополнение до двух (с 8-битными числами) трактует это как -56, беззнаковая интерпретация будет рассматривать это как 200, а в ASCII это будет какой-то специальный символ в зависимости от кодировки.

person AnilRedshift    schedule 09.06.2015
comment
так как же представить десятичное число 200? или мы не можем? Мне нужно напомнить об этом ... есть ли ссылка, чтобы прочитать об этом? - person Nirmal; 09.06.2015
comment
200 не может быть представлено в 8 битах с использованием дополнения до двух, диапазон составляет -127 ‹-› 128. Либо биты должны интерпретироваться как целое число без знака, ИЛИ вам нужно больше битов (по крайней мере, 9), чтобы представить 200 как дополнение до двух. номер - person AnilRedshift; 09.06.2015