下面是位反转(8位)的查找表
static const unsigned char BitReverseTable256[256] =
{
# define R2(n) n, n + 2*64, n + 1*64, n + 3*64
# define R4(n) R2(n), R2(n + 2*16), R2(n + 1*16), R2(n + 3*16)
# define R6(n) R4(n), R4(n + 2*4 ), R4(n + 1*4 ), R4(n + 3*4 )
R6(0), R6(2), R6(1), R6(3)
};
下面的链接解释了其背后的算法。但是我并不完全理解它。 Look-up table for 8 bit reversal
我想要类似的宏用于4位反转,以便可以理解8位。 有人可以提供相同的宏进行4位反转。
谢谢
答案 0 :(得分:1)
对于4位整数,您的查询表大小为16,即pow(2, 4)
。
我将从手动枚举开始,以便我们找出是否存在模式:
Integer Binary Representation Reverse Binary Representation Reverse Value
0 0000 0000 0
1 0001 1000 8
2 0010 0100 4
3 0011 1100 12
4 0100 0010 2
5 0101 1010 10
6 0110 0110 6
7 0111 1110 14
8 1000 0001 1
9 1001 1001 9
10 1010 0101 5
11 1011 1101 13
12 1100 0011 3
13 1101 1011 11
14 1110 0111 7
15 1111 1111 15
请注意,在Reverse Binary Representation
列中,最左边的(最高有效2位)以相同的方式递增,即每隔四次00 10 01 11
。
类似地,请注意,在Reverse Binary Representation
列中,最右边的(最低有效2位)也采用相同的模式,即00 10 01 11
,但一次执行四次。
二进制数字0
1
2
3
00
01
10
{{1} },并且如果您将每个反向:11
00
10
01
,您将得到11
0
2
{{1 }}!
1
3
0
2
将作为基础,我们将使用以下等式进行概括:
1
,3
,n
,n + 2 * 4
提示:尝试使用以上公式导出列n + 1 * 4
。
例,
前四个值从n = 0得出
n + 3 * 4
我已经很长时间没有写C了,但是我想你应该(我会被纠正的):
Reverse Value
在Python中:
0 = 0
0 + 2 * 4 = 8
0 + 1 * 4 = 4
0 + 3 * 4 = 12
但是,基于宏的解决方案对于4位而言可能会过大。您可以只初始化一组反向值。
无论如何,我希望这能帮助您理解模式。