分治法的绝妙应用-求bit翻转

    技术2022-05-11  53

    假设原32bits 字符串丛左到右为 0 1 2 3 4 5。。。。。31 反转将第0位和第31位互换,第1位和第30位互换 最终结果 排序为31,30,29,28。。。。。。。。。1,0 反转n位=反转前面n/2位 >>n/2  ¦ 反转后面n/2位 <<n/2;用非递归实现的代码: unsigned int reverse(register unsigned int x) {         register unsigned int y = 0x55555555;         x = (((x  >> 1) & y)  | ((x & y)  << 1)); //将临近的1位翻转         y = 0x33333333;         x = (((x  >> 2) & y)  | ((x & y)  << 2));//将临近的2位翻转         y = 0x0f0f0f0f;         x = (((x  >> 4) & y)  | ((x & y)  << 4));//将临近的4位翻转         y = 0x00ff00ff;         x = (((x  >> 8) & y)  | ((x & y)  << 8));//将临近的8位翻转         return((x  >> 16)  | (x  << 16));//将临近的16位翻转 } 算法真的博大精深,这个人的解法更是非常的巧妙,太佩服了。

    最新回复(0)