c++ - 将两个字节转换为 16 位值的最有效方法?

标签 c++ byte 16-bit 8-bit

假设第一个字节 = 2 (dec),第二个字节 = 1 (dec)。

因此,第一个字节代表 257(十进制)。 因此第二个字节代表 1 (dec)。

所以(总的)16 位值是 258(dec)。

如果我这样做:

  (byte1*256)+byte2

这是“正确”的方式吗?或者有更好的方法吗?

谢谢,

最佳答案

对于大多数现代优化器,没有“正确”的方法来做到这一点:您的代码将被转换为您系统上最快的代码,其中可能包括

  • 将字节分别加载到下部和上部部分寄存器 - 没有进行任何转换,字节直接加载到它们各自的位置。
  • 位移最高字节并在较低字节中进行 OR 运算 - 类似于 byte1<<8 | byte2
  • 移动最高字节并添加较低字节 - 与上面相同,除了 +而不是 |
  • 在您的系统上快速运行的完全不同的东西 - 不同的架构可能具有上面未描述的特定于架构的优化。

在您的源代码中,您应该集中精力让人类读者清楚地了解您的意图:如果它乘以 256这对你的读者来说最有意义,然后使用乘法;如果是位移位,则使用位移位。编译器将负责使您的代码尽可能高效。

关于c++ - 将两个字节转换为 16 位值的最有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15962156/

相关文章:

c++ - Dependency Walker 在函数名称后显示 @x

c++ - 为什么每次成功的 QueryInterface() 调用之后都是 Release() 调用?

java - InputStream 读取源中不存在的额外字节

java - 为什么仅通过移位转换两个字节是不一致的?

java - Android:如何获取单 channel 16位PNG位图的像素

c++ - C++中将stdin的内容读入字符串或 vector 的最快方法

c++ - 如何隐藏实现帮助模板?

Python - 基准测试磁盘 - 在文件中准确写入 x 字节

c - Left Shift 和 Right Shift 防止除法丢失

embedded - 16 位处理器的任意精度算术 (Bignum)