zl程序教程

您现在的位置是:首页 >  后端

当前栏目

java位运算应用和工具详解编程语言

2023-06-13 09:20:42 时间

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()

java位运算应用和工具详解编程语言

转载请注明来源网站:blog.ytso.com谢谢!

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/14673.html

c