求一算法!该怎么处理

求一算法!
把数组一(A)的下标按二进制逆运算赋给数组二(B)相应的下标(先判断这个二进制的位数)
例:B[4]=A[1];//4=0x100,1=0x001,三位时
      B[8]=A[1];//8=0x1000,1=0x0001,四位时

------解决方案--------------------
先判断这个二进制的位数?

你想要如何判断?
0x100与0x0100是3位还是四位?
实际上你的问题很简单的,只要先取反,在与上一个数(比如0x00111)就好了,这个数可以用pow(2.0,位数)-1来获取。
------解决方案--------------------
for (int i = 0; i < 10; i++) //假设数组有10个元素
{
UINT s = 0;
for (int j = 0; j < Bits; j++) //Bits为半字节数,就是你所位的三位、四位
{
UINT f = i;
f < <= 4 * j;
f > > = 4 * (Bits - 1);
f < <= 4 * j;
s |= f;
}
b[s] = a[i];
}
上面的程序最多8位(四字节),如果你要任何位(字节)都行,那就难了。
------解决方案--------------------
直接移位不行吗?
------解决方案--------------------
那为什么4=0x100,1=0x001,4的逆运算是1呢?
------解决方案--------------------
这个问题想要完美的算法估计很难,估计我们每个人都有自己的算法,但都很难说是最好的算法。
LZ是什么算法?可以比较一下优劣阿,直接文字叙述就可以了。
------解决方案--------------------
除以2得位数的同时用一个堆栈存余数,然后算倒过来写的那个数

人比较笨,想不出啥好办法
------解决方案--------------------
取反!
------解决方案--------------------
建个下标映射表。。。。。