首页 > 代码库 > 位运算应用
位运算应用
有时需要追求效率,会代替一些算术运算。
- 求商:a >> n <=> a / 2^n
- 求积:a << n <=> a * 2^n
- 求余:a & ((1 << n) - 1) <=> a % 2^n
- 奇偶判断:a & 1 == 1 <==> a % 2 == 1
一般1表示选中或者启动项,0表示未选或者关闭项。
- 获取全部项:(1 << n) - 1
- 获取第n项:1<<(n-1)
- 获取反选项:~a
- 启动目标项:a |= b
- 合并两选项:a | b
- 关闭目标项:a &= ~b
- 查看公共项:a & b
- 查看改变项:a1 ^ a2
- 查看未变项:~(a1 ^ a2) = ~a1 ^ a2 = a1 ^ ~a2
输出组合,如下示例,输出abcd的组合。
public static void main(String[] args) { char[] chars = "abcd".toCharArray(); int len = chars.length; int bits = (1 << len) - 1; for (int i = bits; i > 0 ; i = (i - 1) & bits) { System.out.printf("%" + len + "s:", Integer.toBinaryString(i)); for(int j = 0; j < len; j++) { if(((i >> j) & 1) == 1) System.out.print(chars[j]); } System.out.println(); } }
输出结果:
1111:abcd 1110:bcd 1101:acd 1100:cd 1011:abd 1010:bd 1001:ad 1000:d 111:abc 110:bc 101:ac 100:c 11:ab 10:b 1:a
>>与>>>的区别:
- >>是带符号右移,即正数时左边补0,负数时左边补1。
- >>>是无符号右移,即总是左边补0。
位运算应用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。