как преобразовать два байта в одно 16-разрядное число?

Я понимаю, что 1 байт будет содержать число от 0 до 255. И что 16-битное число находится между 0-65535.

Если я пытаюсь представить 16-битное число, используя два отдельных 8-битных регистра...как мне это сделать? Как работает математика?

спасибо!

3 ответов


математика работает следующим образом:

sixteenBitNumber = 256*upperByte + lowerByte;

со сдвигами и побитовыми операциями:

sixteenBitNumber = (upperByte<<8) | lowerByte;

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


в десятичном формате как взять 7 и 9 и сделать 79? (7*10)+9 или 12 и 34 и сделать 1234? (12*100)+34. Нет разных 0x12 и 0x34 и сделать 0x1234. (0x12 * 0x100) + 0x34. Намного чище для бит shift (0x12


вы хотите работать с ними вместе? Это легко

допустим, у вас есть номер 2643-в базе 10. если разбить его пополам, получится что-то вроде 26 и 43, верно? ну, вы знаете, что если вы умножаете на два, вы должны умножать справа налево и нести. Так что сделайте это - умножьте правую сторону, и если есть переполнение, добавьте это в левую сторону, а затем умножьте левую сторону.

например:

(37 82) *2     ->     ((37*2) + overflow) + 64     ->     (74 + 1) 64     ->     75 64

см. это сработало? То же самое касается деления - надо нести? Воруй с верхнего бита. Хотите добавить или вычесть числа? Не так уж и трудно!

двоичные числа работают одинаково.

(01110110 10110011) * 10 = (0)     <-     1110110(1)     <-     01100110

в основном вы вычисляете нижний конец, затем вычисляете верхний конец, затем применяете переполнение.