Скажите первый байт = 2 (декабрь) и второй байт = 1 (декабрь).
Следовательно, первый байт представляет 257 (dec).
Следовательно, второй байт представляет 1 (dec).
Таким образом, (общее) 16-битное значение составляет 258 (декабрь).
Так что если я сделаю:
(byte1*256)+byte2
Это «правильный» способ сделать это? Или есть лучший способ?
Спасибо,
Т.
В большинстве современных оптимизаторов не существует «правильного» способа сделать это: ваш код будет преобразован во все, что быстрее в вашей системе, что может включать
byte1<<8 | byte2
+
вместо |
В своем исходном коде вы должны сконцентрироваться на разъяснении ваших намерений читателям: если оно умножается на 256
это имеет смысл для ваших читателей, а затем использовать умножение; если это битовое смещение, используйте битовое смещение. Компилятор позаботится о том, чтобы сделать ваш код максимально эффективным.
Это должно работать:
(byte1<<8) | byte2
Но я думаю, что здесь может быть подвох. Если твой byte1
а также byte2
Типы данных имеют размер всего 1 байт (то есть 8 бит), поэтому смещение, вероятно, не поможет.
Я думаю, то, как ты это сделал, должно быть совершенно нормально. Однако, для ударов что-то вроде этого, вероятно, также будет работать:
int16 total = byte1;
total = (total<<8) | byte2
Вы можете использовать оператор сдвига, который сдвигает биты:
(Байт 1 << 8) + byte2
Сдвиг влево такой же, как умножение на степени 2. В приведенном выше примере
(2 << 8) совпадает с (0b 0000 0010 << 8) который является (0b 10 0000 0000).
Мы сдвигаемся на 8, потому что в байте 8 бит.