Java基础–位运算符

  • Post author:
  • Post category:java




1:运算符分类?

  • & (与)
  • | (或)
  • ^ (异或)
  • ~(取反)
  • << (左移)
  • (>>) (向右移位)
  • (>>>) 无符号右移



2:&(与) 运算符使用说明 ?

  • 只有两个位上面都是 1 才是 1,其他为 0


  • 特点:得到的结果的 max = 两个数中的最小值 比如 18 & 4 得到的值得肯定是 < = 4的;所以当需要把值控制在某个范围内时,可以使用该操作符。



3:I (或) 运算符使用说明 ?

  • 只要有 一个位为1 ,则结果为1 。



4:^ (异或) 运算符使用说明 ?

  • 只有两位数不同时才为 1。
  • 特点:



    • 与1相∧,使特定位翻转。

      • 0010110 ^ 0011111 = 0001001


    • 与0相∧,保留原值。

      • 0010110 ^ 0000000= 0010110


    • 交换两个值,不用临时变量

      • 代码示例:

         int a = 3, b = 4;
         a = a ^ b;
         b = b ^ a;
         a = a ^ b;
         System.out.println("a = " + a + ",b = " + b);
         //最后结果 a = 4 ,b = 3;
        



5:~ (取反) 运算符使用说明 ?

  • 为1的变为 0,为 0 的为 1。



6:<< (向左移位) 运算符使用说明 ?

  • 比如 5(101) << 1 , 5向左移动一位, 也就是 101(二进制) 整体向左移动一位,然后补 1 个 0。
  • 公式:5 乘以 2的一次幂 = m(要移动的数)*2的n(位移数)次幂
  • 数越来越大



7:>> (向右移位) 运算符使用说明 ?

  • 如果该数(要移动的数)为正,则高位补0,若为负数,则高位补1
  • 比如 5(101) >> 1 , 5向右移动一位, 也就是 101(二进制) 整体向右移动一位,然后砍 1 位数,也就是 10 (2) ;
  • 公式:5/2的一次幂 = m/2的n次幂(取整数)
  • 对于正数来说越来越小



8:无符号右移(>>>) 运算符使用说明 ?

  • 和 >> 类似,只不过 >>> 会直接去掉移动的位数 ;
  • 对于正数来说和 >> 一样效果,但对于负数来说,当移动 1 位 时,将达到一个正数最大值,之后移动到32位时,等于其本身的值。




9:代码地址



版权声明:本文为qq_24067089原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。