位反转 - 不清楚输出是什么

Bit Reversal - not clear what the output is

我正在阅读以下示例:

  Var1(REG1, 0U, 16U);
  Var2(REG2, 0U, 8U);

   UINT32 FirstReg = Getaddress1(Var1); //the dimension is 16 bit

   FirstReg = ((FirstReg >> 1) & 0x5555) | ((FirstReg << 1) & 0xaaaa);
   FirstReg = ((FirstReg >> 2) & 0x3333) | ((FirstReg << 2) & 0xcccc);
   FirstReg = ((FirstReg >> 4) & 0x0f0f) | ((FirstReg << 4) & 0xf0f0);
   FirstReg = ((FirstReg >> 8) & 0x00ff) | ((FirstReg << 8) & 0xff00);
   FirstReg = (FirstReg << 8);

   UINT32 SecondReg = Getaddress2(Var2);//the dimension is 8 bit
   SecondReg = ((SecondReg >> 1) & 0x5555) | ((SecondReg << 1) & 0xaaaa);
   SecondReg = ((SecondReg >> 2) & 0x3333) | ((SecondReg << 2) & 0xcccc);
   SecondReg = ((SecondReg >> 4) & 0x0f0f) | ((SecondReg << 4) & 0xf0f0);
   SecondReg = ((SecondReg >> 8) & 0x00ff) | ((SecondReg << 8) & 0xff00);
   SecondReg = (SecondReg >> 8);

   return (FirstReg | SecondReg);

基本上,据我所知,其目的是反转 2 个 UINT32 Reg(s) 变量中读取的位,并仅收集 1 个 UINT32 类型的变量。

我不知道 SecondReg 的第一位(例如)将成为返回变量的第 17 位还是第一个。

首先,即使算法使用 32 位整数,也只使用 16 个最低有效位,因为它们 anded 只有 16 位值。

因此在第一部分之后(最后一次移位之前)FirstRegSecondReg 包含反转的原始值的 16 个最低有效位。

FirstReg左移8位,SecondReg右移8位,都是ored。结果是一个 32 位值,由(最高有效字节到最低有效字节)组成:O,FirstReg 的高位字节,FirstReg 的低位字节,SecondReg[= 的高位字节17=]