除以因子2和字节操作C ++

时间:2012-12-07 14:42:05

标签: c++ bit division cpu-registers

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

  1. 如何在C ++中进行此类操作,位移动?
  2. 如果我想交换它们的值,我怎样才能访问int的int和lower字节的高位字节?
  3. 我知道这些操作可以在汇编级别完成,因为我们正在处理寄存器,我只是不知道我们是否可以在C ++中访问这些东西。

1 个答案:

答案 0 :(得分:3)

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

例如:

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

将为您提供交换的2字节整数的两个字节。如果你有一个更大的整数(例如4个字节),如果需要一些特别改组的顺序,则需要更多的屏蔽和移位。

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

相关问题