算法--位运算
来源:互联网 发布:爸爸网络用语怎么叫 编辑:程序博客网 时间:2024/05/17 07:10
基本运算
bin(num) #将十进制整数取二进制a & b #位与,(5 & 9 = 1) => (0101 & 1001 = 0001)a | b #位或,(5 | 9 = 13) => (0101 | 1001 = 1101)a ^ b #位异或(半加),(5 ^ 9 = 12) => (0101 ^ 1001 = 1100)~a #位取反 (~5 = -6) => (~1 0101 = 0 1010)a << b #左移位(a乘以b个2) (5 << 2 = 20) => (101 << 2 = 10100)a >> b #右移位(a除以b个2) (5 >> 2 = 1) => (101 >> 2 = 1)
常用算法
//交换两个变量a ^= bb ^= aa ^= b//java获取int最大值(1 << 31) - 1~(1 << 31)//java获取int最小值(1 << 31)//判断一个数的奇偶性(n & 1) == 1//计算平均数(x + y) >> 1//取相反数~n + 1
一些有趣的问题
判断是否为2的幂次:
2的幂次的二进制必然只有一个1,其余为0。将该值减去1,就会将原本是1的那位变成0。这个数按位与一定是0。
n > 0 && (n & (n - 1) == 0
计算在一个 32 位的整数的二进制表式中有多少个 1:
由x & (x - 1)消去x最后一位的1可知。不断使用 x & (x - 1) 消去x最后一位的1,计算总共消去了多少次即可。
def count(num): cou = 0 while num != 0: num = num & (num - 1) cou += 1 return cou
数组中,只有一个数出现一次,剩下都出现两次,找出出现一次的数:
只要将所有数字异或起来,出现2次的数字不影响,留下只出现一次的数字
a ^ b ^ b = a //对一个数取两次异或会返回原值,也可用于加密
数组中,只有一个数出现一次,剩下都出现三次,找出出现一次的数
??????
阅读全文
0 0
- 算法学习--位运算
- 算法:位运算
- 算法--位运算
- 位运算算法
- 算法研究之位运算
- 经典算法之位运算
- 常用位运算算法题目
- Time33算法与位运算
- 位运算的一些算法
- 进制+补码+位运算+算法
- 关于位运算的算法
- 【基础算法】位运算-基本运算
- 基于位运算的排序算法
- 权限管理控制算法(位运算)
- 提高算法性能——位运算
- 一道位运算的算法题
- 【基础算法】位运算-基础篇
- 利用位运算的模四算法
- Problem 2 Even Fibonacci numbers
- 当日历遇上奇葩需求
- MT和MD的区别
- table 表格细线条实现方式
- 树状数组模板
- 算法--位运算
- BigDecimal
- python join 函数用于列表格式化输出
- 《程序员的修炼——从优秀到卓越》读书笔记
- php对mongo写操作 遇到的类型转换问题
- IDEA部署多个web项目的方法
- App Store构建版本无效
- 关于Android写入文件失败的问题
- 安卓app客户端访问php服务器数据交互