как преобразовать два байта в одно 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
в основном вы вычисляете нижний конец, затем вычисляете верхний конец, затем применяете переполнение.