在16位字中移位/交换8位

时间:2016-03-07 23:19:30

标签: bit-shift

我正在开展一个项目,我希望在16位字上实现一些位移。

具体来说,我希望将8个最低有效位转换为8个最高有效位,反之亦然。

请注意,我没有反转或旋转这些位,正如之前的Stackflow问题中可能已经提到的那样。

例如,如果我有以下16位字:

0000 0000 0010 0110

我想执行某种按位或算术运算将其转换为:

0010 0110 0000 0000

本质上,最低有效8位交换位置具有最高有效8位。

BTW - 重要的是,我正在处理这些16位字的2个补码二进制值。

有关如何执行此操作的任何想法?

所有的想法都赞赏。 THX。

3 个答案:

答案 0 :(得分:0)

  1. 将值乘以256,得到临时值A
  2. 将(整数除法)值除以256,得到临时值B
  3. 使用逻辑按位A或B,给出结果C
  4. 逻辑按位,65535用C,给出最终结果。

答案 1 :(得分:0)

您可以应用模数和整数除法:

x = x % 256 * 256 + x / 256;

答案 2 :(得分:0)

步骤1,使用无符号类型。

步骤2:让编译器优化代码。

unsigned swap2bytes(unsigned x) {
  //      LSB-->MSB     MSB-->LSB        Mask-off any higher order bits
  return ((x * 256) + ((x / 256) % 256)) & 0xFFFFFFFF;
}

适用于任何规模的unsigned

固定宽度方法:

int16_t swap2bytes(int16_t x) {
  return x * 256u + x / 256u;
}