[求助]请问怎么实现8位数据对称反转。例:10100000b变为0000101b
我是初学C++的,哪位帮我实现下这个啊。谢谢了,是用堆栈吗
开始x(ai(0<=i<8)代表x中的一位): a7 a6 a5 a4 a3 a2 a1 a0
x & 0x55即x & 01010101b后: 0 a6 0 a4 0 a2 0 a0
(x & 0x55) << 1后: a6 0 a4 0 a2 0 a0 0
x & 0xAA即x & 10101010b后: a7 0 a5 0 a3 0 a1 0
(x & 0xAA) >> 1后: 0 a7 0 a5 0 a3 0 a1
(x & 0x55) << 1 | (x & 0xAA) >> 1后 a6 a7 a4 a5 a2 a3 a0 a1
x = (x & 0x55) << 1 | (x & 0xAA) >> 1;后x变成a6 a7 a4 a5 a2 a3 a0 a1
之后同理
x = (x & 0x33) << 2 | (x & 0xCC) >> 2;后x变成a4 a5 a6 a7 a0 a1 a2 a3
x = (x & 0x0F) << 4 | (x & 0xF0) >> 4;后x变成a0 a1 a2 a3 a4 a5 a6 a7
反转完毕
用递归然后回溯也行
好算法,用位与方式,比用递归好,虽然效果一样,但是如果讲及算法效率的话,这种比递归高很多