lotus

贵有恒何必三更眠五更起 最无益只怕一日曝十日寒

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

 

 

1.  位运算的定义

Java位运算是对操作数的二进制位进行运算,操作数和计算结果都是整型。Java位运算有以下几种类型:&与,|或,^异或,~取反,<<左移,>>右移,>>>无符号右移。

2.Java位运算的场景

Java位运算的场景有很多,比如:

  • 判断奇偶数:a & 1 == 0 表示a是偶数,a & 1 == 1 表示a是奇数。
  • 求绝对值:(a ^ (a >> 31)) - (a >> 31) 可以得到a的绝对值。
  • 求相反数:~a + 1 可以得到a的相反数。
  • 交换两个数:a = a ^ b; b = a ^ b; a = a ^ b; 可以交换a和b的值。
  • 权限控制:用一个int型变量表示32种权限,每一位代表一种权限,用|或运算设置权限,用&与运算检查权限

 

3.JDK中哪些地方用到了位运算

JDK中有很多地方用到了位运算,比如:

  • HashMap的hash方法用到了无符号右移运算符>>>1。
  • Integer的numberOfLeadingZeros方法用到了异或运算符^和右移运算符>>1。
  • BitSet的set和get方法用到了与运算符&和或运算符|1。
  • EnumSet的of方法用到了左移运算符<<1。
  • Thread的getState方法用到了位域和联合的方式来表示线程状态

 

4.位运算的优缺点

位运算的优点是:

  • 位运算是直接对整数在内存中的二进制位进行操作,因此其执行效率非常高。
  • 位运算可以实现一些简单的乘除法,比如乘2或除2,只需左移或右移一位即可。
  • 位运算可以用来进行权限控制,加密解密,压缩解压等操作。

位运算的缺点是:

  • 位运算的可读性较差,不易理解和调试。
  • 位运算的适用范围有限,只能对整数进行操作,不能对浮点数或字符串等类型进行操作。
  • 位运算需要注意一些细节,比如符号位,溢出,补码等.

 

posted on 2023-04-10 17:48  白露~  阅读(173)  评论(0编辑  收藏  举报