分治法的绝妙应用-求bit翻转
来源:互联网 发布:发明专利 知乎 编辑:程序博客网 时间:2024/06/06 18:07
假设原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位和第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位翻转
}
算法真的博大精深,这个人的解法更是非常的巧妙,太佩服了。
- 分治法的绝妙应用-求bit翻转
- 分治法 or BIT 求逆序对
- 分治法的应用-求逆序数
- 分治法的应用
- bit翻转
- 【C语言位运算的应用】如何按bit位翻转一个无符号整型
- 分治法求一组数据的和
- 分治法求集合的所有子集
- 分治法求m的n次方
- 分治法求数组的最大最小值
- 算法 分治法求矩阵的乘积
- 分治法求一组数据的和
- 0026分治法应用之求最大最小值
- 分治法求最大值
- 分治法求最大值
- 分治法求众数
- 将integer的bit位翻转
- 程序员面试---分治法的应用
- [转]XPATH参考
- 新型注入方式直击网络——session注入探究
- java从树组中删除元素
- Apache - mod_rewrite - RewriteRule中的R标记用于发送重定向
- 对所有本站文章的版权声明
- 分治法的绝妙应用-求bit翻转
- AMBA、AHB、APB总线简介
- 今天做了一个程序
- 订阅的意义和方法——写给web2.0新手
- 弹出对话框的同时保持页面的显示
- APR为JBoss AS加速:HTTP Connector配置
- 深入浅出话循环 ——编程开发从零学起
- 用MASM32写了个系统托盘图标管理者 TrayIconMan
- 破阵子