0

我知道将数字除以 2 的最佳方法是向左移动一位。如果我除以 2 的倍数(例如 8)我该怎么办,我是否移动了 3 位,这是我的问题:

  1. 如何在 C++ 中进行此类操作,位移动?
  2. 如果我想交换它们的值,如何访问 int 的高字节和 int 的低字节?

我知道这些操作可以在汇编级别完成,因为我们正在处理寄存器,我只是不知道我们是否可以在 C++ 中访问这些东西。

4

1 回答 1

3

访问整数的高/低字节并交换它们至少可以通过两种方式完成。>>和的组合|,或与union.

例如:

short swapped = (original<<8)|(original>>8);

将为您提供交换的 2 字节整数的两个字节。如果您有一个更大的整数(例如 4 个字节),则需要更多的屏蔽和移位,如果所有字节都需要以某种特别洗牌的顺序。

使用右移 ( ) 优化除以 2 的倍数>>是非优化。您应该编写可读的代码,清楚地了解其意图。编译器将轻松执行此类微优化。

于 2012-12-07T14:47:50.177 回答