дополнительный вопрос 2

#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 идет туда, вы изменили значение числа.