java位运算应用和工具详解编程语言
一.有时需要追求效率,会代替一些算术运算。
求商: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
获取指定项:1 idx
获取反选项:~a
开启指定项:a |= b
合并两选项:a | b
关闭指定项:a = ~b
说明:a中的项,遇到1时变0,遇到0时不变。
查看公共项:a b
保留指定项:a = b
说明:a中的项,遇到0时变0,遇到1时不变。
切换指定项:a ^= b
说明:a中的项,遇到0时不变,遇到1时变化,0变1,1变0。
查看改变项:a1 ^ a2
说明:a1是变化前,a2是变化后,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 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。
Long.bitCount(long),Integer.bitCount(int):计算1的数量。
六.BitSet:用于表示可以比long更长的存储位数。
1.int cardinality(),计算1的数量。
2.and(BitSet),与运算,即保留指定项,a = b。boolean intersects(BitSet),判断是否存在公共项。
3.or(BitSet),或运算,即开启指定项,a |= b。
4.xor(BitSet),异或运算,切换指定项,即a ^= b。flip( ),切换指定项,即a ^= b。
5.andNot(BitSet),与非运算,即关闭目标项,a = ~b。
6.int length(),获取长度。boolean isEmpty(),判断长度是否为0。
7.set( ),开启指定项。clear( ),关闭指定项。set( , boolean),设置指定项的值。clear(),关闭所有项,并清空,即长度重置为0。
8.boolean get(int),获取指定项的开关值。
9.int previousSetBit(int)/int nextSetBit(int):从指定位置开始查找上一个/下一个开启项的索引。
10.int previousClearBit(int)/int nextClearBit(int):从指定位置开始查找上一个/下一个关闭项的索引。
11.BitSet get(int, int):截取子集。
12.构造:s+valueOf(ByteBuffer/byte[]/LongBuffer/long[])
13.转换:toLongArray()/toByteArray()
转载请注明来源网站:blog.ytso.com谢谢!
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/14673.html
c相关文章
- java怎么调用.asmx_Java调用Webservice(asmx)的例子
- java helloworld源代码_Java Hello World源代码剖析
- java判断一个对象是否为空_Java中判断对象是否为空的方法的详解
- java applet介绍,Java Applet教程介绍[通俗易懂]
- idea创建java项目的步骤_Java为什么新建不了项目
- Java servlet中web xml文件内容执行原理
- Java 自定义注解在登录验证的应用
- ?使用 Java 连接 MySQL 数据库的步骤(java怎么连接mysql)
- 中的应用Java中MySQL的灵活运用(mysql在java代码)
- 学习如何使用Linux环境运行Java程序(linux下的java)
- 深入Linux环境下Java应用调试实践(linux调试java)
- 应用Linux监控下Java应用性能分析(linux监控java)
- 简明易懂的介绍Linux java包的25个字的文章标题:Linux Java包:开发和运行Java程序的工具(Linuxjava包)
- 使用Java实现MySQL数据恢复操作(java恢复mysql)
- Java应用在Linux上乱码的原因及解决方法(java linux乱码)
- 收购Oracle收购Java重新定义软件开发未来(java被oracle)
- 构建基于Java和Oracle的强大技术栈(java架构oracle)
- 的应用Java在Oracle数据库中的重要性及应用(java在oracle里)
- JAVA应用系统工具快捷托盘实例代码
- Java基础之java处理ip的工具类