说第一个字节 = 2(十进制)和第二个字节 = 1(十进制)。
因此,第一个字节表示 257(十进制)。因此第二个字节代表 1(十进制)。
所以(总)16 位值是 258(十进制)。
所以如果我这样做:
(byte1*256)+byte2
这是“正确”的做法吗?或者,还有更好的方法?
谢谢,T。
对于大多数现代优化器,没有“正确”的方法:您的代码将被转换为系统上最快的任何东西,其中可能包括
byte1<<8 | byte2
+
而不是 an|
在您的源代码中,您应该专注于让人类读者清楚地了解您的意图:如果乘以256
对您的读者最有意义,那么使用乘法;如果是位移位,则使用位移位。编译器将负责使您的代码尽可能高效。
这应该有效:
(byte1<<8) | byte2
但我认为这里可能有一个问题。如果您的byte1
和byte2
数据类型的大小只有 1 个字节(即 8 位),则移位可能无济于事。
我认为你所做的方式应该完全没问题。但是,对于踢球,这样的事情也可能会起作用:
int16 total = byte1;
total = (total<<8) | byte2
您可以使用移位运算符,它移位: (byte1 << 8) + byte2
左移与乘以 2 的幂相同。在上面的示例中,
(2 << 8) 与 (0b 0000 0010 << 8) 相同,即 (0b 10 0000 0000)。
我们移位 8 位,因为一个字节中有 8 位。