#twos-complement
#двойки-дополнение
Вопрос:
У меня есть вопрос, связанный с дополнением 2. Допустим, у меня есть 16-битный шестнадцатеричный знак со знаком в дополнительном представлении 2, например, возьмите 0xfaa
если он 16-разрядный, мне нужно его расширить, потому что сейчас в нем всего 12 бит. Я знаю, что мне нужно расширить левую часть, чтобы она была преобразована в 0xffaa.
это означает, что мое число отрицательное, это верно?
Комментарии:
1. хорошо, спасибо, вы оба правы, я думаю, что если он уже 16-разрядный, то это 0x0faa, потому что 0 отсутствует, но если мне нужно расширить его с 12-разрядного до 16-разрядного, это 0xffaa, спасибо
2. @PeguinSource — Пожалуйста, примите лучший ответ. Это помогает людям, у которых в будущем возникнет такой же вопрос, быстрее получить ответ.
Ответ №1:
Если я понял ваш вопрос, то вы правы.
Если это 12-разрядное отрицательное число с дополнением к двум, то вы берете бит старшего порядка — бит 11, как его обычно называют, — и копируете его во все биты слева от него, чтобы заполнить 4 бита старшего порядка его 16-разрядного эквивалента. Имеющееся у вас 12-разрядное значение — 0xfaa
— становится 16-разрядным значением 0xffaa
, точно так же, как вы сказали в своем вопросе.
В двоичном формате 12-разрядное значение равно
111110101010
^
---- bit 11
и становится 16-разрядным значением
1111111110101010
^ ^
| -------- bit 11
------------ bit 15
То, что два слова имеют разную длину, никоим образом не меняет того факта, что два числа равны.
Ответ №2:
Вы бы сделали самую значащую цифру 0, так что это было бы 0x0faa. Если вы предполагаете, что и f идет туда, вы изменили значение числа.