Если я понимаю ваш вопрос, то вы правы.
Если это 12-битное отрицательное число, дополняющее два, то вы берете старший бит - бит 11, как его обычно называют, - и копируете его во все биты слева от него, чтобы заполнить старшие 4 бита. его 16-битного эквивалента. Ваше 12-битное значение - 0xfaa
- становится 16-битным значением 0xffaa
, как вы и сказали в своем вопросе.
В двоичном формате 12-разрядное значение равно
111110101010
^
+---- bit 11
и становится 16-битным значением
1111111110101010
^ ^
| +-------- bit 11
+------------ bit 15
То, что два слова имеют разную длину, никоим образом не меняет того факта, что эти два числа равны.