说第一个字节= 2(dec),第二个字节= 1(dec)。
因此,第一个字节代表257(dec)。 因此,第二个字节代表1(dec)。
所以(总)16bit值是258(dec)。
所以,如果我这样做:
(byte1*256)+byte2
这是'正确'的方式吗?或者有更好的方法吗?
谢谢, 吨。
答案 0 :(得分:4)
对于大多数现代优化工具,没有"正确的"这样做的方式:您的代码将转换为系统中最快的代码,可能包括
byte1<<8 | byte2
+
代替|
在你的源代码中,你应该专注于让人类读者清楚你的意图:如果它乘以256
,这对你的读者最有意义,那么就使用乘法;如果是位移,则使用位移。编译器将尽可能提高您的代码效率。
答案 1 :(得分:1)
这应该有效:
(byte1<<8) | byte2
但我觉得这里可能有一个问题。如果您的byte1
和byte2
数据类型的大小只有1个字节(即8位),那么移位可能无济于事。
我认为你做的方式应该完全没问题。但是,对于踢球,这样的事情可能也会起作用:
int16 total = byte1;
total = (total<<8) | byte2
答案 2 :(得分:0)
您可以使用移位运算符,它会移位: (byte1&lt;&lt; 8)+ byte2
向左移动与乘以2的幂相同。在上例中,
(2 <&lt; 8)与(0b 0000 0010 <&lt; 8)相同,即(0b 10 0000 0000)。
我们移位8,因为一个字节有8位。