位反转 - 不清楚输出是什么
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 位值。
因此在第一部分之后(最后一次移位之前)FirstReg
和 SecondReg
包含反转的原始值的 16 个最低有效位。
则FirstReg
左移8位,SecondReg
右移8位,都是ored。结果是一个 32 位值,由(最高有效字节到最低有效字节)组成:O,FirstReg
的高位字节,FirstReg
的低位字节,SecondReg
[= 的高位字节17=]
我正在阅读以下示例:
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 位值。
因此在第一部分之后(最后一次移位之前)FirstReg
和 SecondReg
包含反转的原始值的 16 个最低有效位。
则FirstReg
左移8位,SecondReg
右移8位,都是ored。结果是一个 32 位值,由(最高有效字节到最低有效字节)组成:O,FirstReg
的高位字节,FirstReg
的低位字节,SecondReg
[= 的高位字节17=]