精华内容
下载资源
问答
  • &非~或|异或^ 位运算符主要针对二进制它包括了非或异或从表面上看似乎有点像逻辑运算符但逻辑运算符是针对两个关系运算符来进行逻辑运算而位运算符主要针对两个二进制数的位进行逻辑运算下面详细介绍每个...
  • Java位运算符详解

    2019-07-12 20:14:52
    Java学习笔记----位运算符 位运算符是针对二进制的每一位进行运算的符号,专门对数字0和1操作。Java位运算符如下 运算符 运算 范例 结果 & 按位 0&0 0 0&1 0 1&1 1 | 按位或 ...

    Java学习笔记----位运算符

    位运算符是针对二进制的每一位进行运算的符号,专门对数字0和1操作。Java中位运算符如下

    运算符 运算 范例 结果
    & 按位与 0&0 0
    0&1 0
    1&1 1
    | 按位或 0|0 0
    0|1 1
    1|1 1
    ~ 取反 ~0 1
    ~1 0
    ^ 按位异或 0^0 0
    0^1 1
    1^1 0
    << 左移 00000010<<2 00001000
    10010011<<2 01001100
    >> 右移 01100010>>2 00011000
    11100010>>2 11111000
    >>> 无符号右移 01100010>>>2 00011000
    11…11100010>>>2 0011…111000

    与运算符&

    如果两个二进制数都为1,则该位结果为1,否则就为0
    例如将6与11进行与运算
    在这里插入图片描述
    结果为2

    或运算符|

    如果二进制位上有一个值是1那么结果位1 ,否则为0
    将6和11进行或运算
    在这里插入图片描述
    结果为15

    取反~

    只对一个操作数进行操作,如果是0结果就为1,如果是1结果就为0
    将6取反
    在这里插入图片描述
    结果为-7

    按位异或^

    将两个二进制数进行异或运算,如果二进制位相同即为0,不同则为1
    将6和11进行按位异或
    在这里插入图片描述
    结果为13

    位运算符 左移<< 右移>>

    左移就是将所有二进制位向左移动一位,右边的空位补0,左边移走的舍去
    将11左移1位
    在这里插入图片描述
    结果为22
    右移就是将所有二进制位右移一位,左边的空位根据原数的符号补0或1,原来是负数就补1原来是正数就补0
    将11右移1位

    结果为5

    无符号右移 >>>

    跟右移一样,不同的是左边的空位补0,不考虑正负
    将11无符号右移跟右移结果一致。

    展开全文
  • java位运算符详解

    千次阅读 多人点赞 2018-03-28 11:57:46
    java位运算符详讲一、位运算符分类 java位运算符主要有:按位&amp;、按位或|、按位非~、按位异或^。 在使用时,需要将运算数都转换为二进制再进行运算,若为负数则使用补码表示。二、位运算符使用方式 1...
    java位运算符详讲
    一、位运算符分类
        java中位运算符主要有:按位与&、按位或|、按位非~、按位异或^。
     在使用时,需要将运算数都转换为二进制再进行运算,若为负数则使用补码表示。

    二、位运算符使用方式
        1、按位与&

        使用规则:全一则一,否则为零。
        eg:计算7&-5的结果
        第一步:byte中的二进制
           7的二进制
           被除数    除数    商    余数
            7         2      3      1
            3         2      1      1
            1         2      0      1
            7的二进制为:00000111
           -5的二进制
            被除数    除数    商    余数
            5         2      2      1
            2         2      1      0
            1         2      0      1
            -5的二进制为:10000101
            -5的补码为:  11111010  + 1   11111011
            00000111&11111011:
            00000111
            11111011
            00000011——>对应十进制的3

        ②、按位或|

        使用规则:全0为0,否则为1;
        eg:byte位的 2|-6
        2的二进制位:  0000 0010
        -6的二进制位:1000 0110
        -6的补码:       1111 1010
        运算结果:       1111 1010
        计算原码:       1000 0110
        相当于十进制位的:-6
       
     ③、按位非~

      使用规则:遇0则1,遇1则0;
      eg:~-6
      -6的二进制位:1000 0110
      -6的补码:       1111 1010
      计算结果:       0000 0101
      相当于十进制:5
      注意:按位非是单目运算符。
     ④、按位异或^
         使用规则:相同位0,否则为1;
      eg:2^-6
      2的二进制位:  0000 0010
      -6的二进制位:1000 0110
      -6的补码:       1111 1010
      计算结果:       1111 1000
      原码:              1000 1000
      相当于十进制位:-8;

    三、位运算的意义
        二进制运算符,包括位运算符和移位运算符,使程序员可以在二进制基础上操作数字,可以更有效的进行运算,
     并且可以以二进制的形式存储和转换数据,是实现网络协议解析以及加密等算法的基础。

       
         
    展开全文
  • 位运算符主要针对二进制,它包括了:“”、“非”、“或”、“异或”。 移位运算符包括,“左移运算符”,“有符号右移运算符”、“无符号右移运算符”。 位运算 异或 ^ 异或运算符是用符号“^”表示的,其...

    位运算符主要针对二进制,它包括了:“与”、“非”、“或”、“异或”。
    移位运算符包括,“左移运算符”,“有符号右移运算符”、“无符号右移运算符”。



    位运算

    1. 异或 ^
      异或运算符是用符号“^”表示的,其运算规律是:
      两个操作数的位中,相同则结 果为0,不同则结果为1

      简单实例

      /**
       * @function: 异或位运算
       */
      @Test
      public void test(){
          int a=33;
          int b=32;
          System.out.println(a^b);
      }
      

      输出结果:1
      因为33转换成二进制是100001,32转换成二进制是100000,异或结果是000001

      拓展:异或的应用

      第一:简单的加密解密
      因为a ^ b ^ b = a

      第二:高效率交换两个整数

      /**
       * @function: 使用异或,高效率交换两个整数
       */
      @Test
      public void test2(){
          int a=100;
          int b=88;
      
          //使用异或交换
          a=a^b;
          b=a^b;
          a=b^a;
      
          System.out.println(a);
          System.out.println(b);
      }
      

      运行结果:
      在这里插入图片描述
      其实两个应用道理是相同的,一个数异或另一个数两次得到的还是他本身



    1. 与 &
      与运算符用符号“&”表示,其使用规律如下:
      两个操作数中位都为1,结果才为1,否则结果为0

      简单实例

      /**
       * @function: 与位运算
       */
      @Test
      public void test3(){
          int a=33;
          int b=32;
          System.out.println(a&b);
      }
      

      运行结果:32
      因为因为33转换成二进制是100001,32转换成二进制是100000,与结果是100000

    2. 或 |
      或运算符用符号“|”表示,其运算规律如下:
      两个位只要有一个为1,那么结果就是1,否则就为0

      简单实例

      /**
       * @function: 或位运算
       */
      @Test
      public void test4(){
          int a=33;
          int b=32;
          System.out.println(a|b);
      }
      

      运行结果:33
      因为因为33转换成二进制是100001,32转换成二进制是100000,或结果是100001

    3. 非 ~
      非运算符用符号“~”表示,其运算规律如下:
      如果位为0,结果是1,如果位为1,结果是0

      简单实例

      /**
       * @function: 非位运算
       */
      @Test
      public void test5(){
          int a=33;
          int b=~a;
          System.out.println(b);
          System.out.println(Integer.toBinaryString(b));
      }
      

      运行结果:
      在这里插入图片描述

    移位运算

    移位运算操作的就是二进制的位
    在这里插入图片描述
    简单的,<<n 左移相当于乘2的n次方,>>n(>>>n) 右移相当于除2的n次方,然后这个>>>与>>的区别是对负数的处理上

    简单示例

    	/**
         * @function: 移位运算
         */
        @Test
        public void test6() {
            int a = 32;
            int b = -32;
            System.out.println(Integer.toBinaryString(a));
            System.out.println(Integer.toBinaryString(b));
            System.out.println(Integer.toBinaryString(a >> 2));
            System.out.println(Integer.toBinaryString(b >> 2));
            System.out.println(Integer.toBinaryString(a >>> 2));
            System.out.println(Integer.toBinaryString(b >>> 2));
            System.out.println(Integer.toBinaryString(a << 2));
            System.out.println(Integer.toBinaryString(b << 2));
        }
    

    运行结果
    在这里插入图片描述

    展开全文
  • 1. ^(异或运算符) ^是针对二进制的二目运算符。运算规则:两个二进制数值如果在同一上相同,...(与运算符) &是是针对二进制的二目运算符。需要注意的是&&是java中判断条件之间表示“和”的标识符,

    1. ^(异或运算符)

    ^是针对二进制的二目运算符。运算规则:两个二进制数值如果在同一位上相同,则结果中该位为0,否则为1,比如1011 & 0010 = 1001。

    2. |(或运算符)

    |是针对二进制的二目运算符。运算规则:两个二进制数值如果在同一位上至少有一个1,则结果中该位为1,否则为0,比如1011 & 0010 = 1011。

    3. &(与运算符)

    &是是针对二进制的二目运算符。需要注意的是&&是java中判断条件之间表示“和”的标识符,&是一个二目运算符,两个二进制数值如果在同一位上都是1,则结果中该位为1,否则为0,可以认为两个都是true(1),结果也为true(1),比如1011 & 0110 = 0010。

    &还有一个比较重要的地方,也是面试中经常出现的问题,即该运算符可以计算余数。我们知道四则运算中速度最慢的就是除,而取余操作更加慢,因此可以通过&来快速的求两个数的余数,来看例子:

    public ModTest{
        public static void main(String[] args){
            System.out.println(45 & 11);
            System.out.println(45 & 7);
        }
        /**result:3, 5*/
    }

    给定x, y两个数值,想求x与y的余数,只需要x & (y-1)即可,如上面例子所示,想求45和12(45和8)的余数,只要求45 & 11(45 & 7)。


    以下三种运算符都是位运算符

    >>x(常数): 向右移动x位(顶点在哪个方向就往哪个方向移动),如果该数是正数,则高位(最左边)补x个0,如果是负数,则最高位补x个1。

    <<x(常数): 向左移动x位(顶点在哪个方向就往哪个方向移动),无论正负数低位(最右边)都补x个0。

    <<<: 无该表示方式。

    >>>x(常数): 表示无符号右移x位,所谓无符号是与>>x对比,该操作在移动后,无论正负数高位(最左边)都补0。

    4. <<(左移运算符)

    举例1:-20<<2

    原码:10000000 00000000 00000000 00010100

    反码: 11111111   11111111   11111111  11101011(符号位不变,其他位取反)

    补码: 11111111   11111111   11111111  11101100(反码 + 1)

    左移两位(最右边两位添0)

    补码: 11111111   11111111   11111111  10110000

    反码: 11111111   11111111   11111111  10101111(补码 - 1)

    原码: 10000000 00000000 00000000 01010000(符号位不变,其他位取反)

    结果:-80

    举例2:20<<2

    原码(反码,补码):00000000 00000000 00000000 00010100

    左移两位(最右边两位添0)

    原码(反码,补码):00000000 00000000 00000000 01010000

    结果:80

    5. >>(右移运算符)

    举例1:-20>>2

    原码:10000000 00000000 00000000 00010100

    反码: 11111111   11111111   11111111  11101011(符号位不变,其他位取反)

    补码: 11111111   11111111   11111111  11101100(反码 + 1)

    右移两位(最左边两位添1)

    补码: 11111111   11111111   11111111  11111011

    反码: 11111111   11111111   11111111  11111010(补码 - 1)

    原码: 10000000 00000000 00000000 00000101(符号位不变,其他位取反)

    结果:-5

    举例2:20>>2

    原码(反码,补码):00000000 00000000 00000000 00010100

    右移两位(最左边两位添0)

    原码(反码,补码):00000000 00000000 00000000 00000101

    结果:5

    6. >>>(无符号右移运算符)

    举例1:-2>>>1

    原码:10000000 00000000 00000000 00000010

    反码: 11111111  11111111   11111111  11111101(符号位不变,其他位取反)

    补码: 11111111  11111111   11111111  11111110(反码 + 1)

    右移1位(无符号位运算符,最左边一位只添0)

    补码: 01111111  11111111   11111111  11111111

    反码: 01111111  11111111   11111111  11111111(高位为0,正数)

    原码: 01111111  11111111   11111111  11111111(与反码相同)

    结果:2147483647

    举例2:2>>>1

    原码(反码,补码):00000000 00000000 00000000 00000010

    右移一位(最左边一位添0)

    原码(反码,补码):00000000 00000000 00000000 00000001

    结果:1

    7.额外知识

    ^=、|=、&=、<<=、>>=、>>>=与不加等号差不多,只是加入了赋值操作,以>>=为例:

    public class Test {
    	public static void main(String[] args) {
    		int num = 2;
    		System.out.println(num>>=1);
            System.out.println(num);
    	}
        /**result:1  1
    
    }

    注意:既然有赋值操作,那么运算符左边不能是一个常数,比如2>>=1就会报错。

    计算中储存数据是用补码的形式

     

    参考文献:

    https://www.cnblogs.com/liaopeng/p/8436155.html

    http://www.cnblogs.com/chuijingjing/p/9405598.html

    https://blog.csdn.net/tianyeshiye/article/details/80261622

    展开全文
  • Java位运算符详解实例——(&amp;amp;)、非(~)、或(|)、异或(^) 位运算符主要针对二进制,它包括了:“”、“非”、“或”、“异或”。从表面上看似乎有点像逻辑运算符,但逻辑运算符是针对两个...
  • 位运算符 & 按位 对应位置上的数 进行&操作 只能该位置的值都为1时 才为1 否 则为0 ​ 0000-0000-0100-0111 & 0000-1000-1000-0101 ============================================= 结果 0000...
  • Java 位运算符详解

    2016-10-05 21:55:02
    public class BitwiseOperator { //@Aaron Yang public static void main(String[] args) { //&运算符&----------------------------------------------------------------- //按位与:相同为1,不同
  • java位运算符详解

    2020-06-04 15:53:19
    java位运算符有“( & )”、“或( | )”、“异或( ^ )”、“取反( ~ )”、“左移( << )”、“右移( >> )”、“无符号右移( >>> )”,主要是针对二进制来进行逻辑计算的 ( & ) ...
  • Java语言中,提供了7种位运算符,分别是按位(&)、按位或(|)、按位异或(^)、取反(~)、左移(<<)、带符号右移(>>)和无符号右移(>>>)。这些运算符当中,仅有~是单目运算符,其他...
  • java运算符详解

    2021-04-02 21:52:51
    和 | (不推荐使用)四、位运算符按位 &按位或 |:按位取反 ~按位异或 ^五、移位运算无符号右移 >>>六、条件运算符(三目操作符)七、运算符的优先级总结 一、算数运算符 1.基本四则运算符 基本四则...
  • Java运算符详解

    2020-01-08 11:06:02
    位运算符主要针对二进制,它包括了:“”、“非”、“或”、“异或”。从表面上看似乎有点像逻辑运算符,但逻辑运算符是针对两个关系运算符来进行逻辑运算,而位运算符主要针对两个二进制数的位进行逻辑运算。下面...
  • JAVA位运算符示例详解&、或|、异或^、非~、左移<<、右移>>、无符号右移>>>对比表或异或非左移右移无符号右移 对比表 位运算符用于整型操作数结果数,基于其二进制编码进行运算 ...
  • 1.位运算符种类介绍 按位:& 按位或:| 按位异或:^ 求反:~ (ps:这里指的是一次求反) 向左移位:<< 向右移位:>> 位运算符应用于整数类型(int),长整型(long),短整型(short),字符型(char),...
  • 位运算符主要针对二进制,它包括了:“”、“非”、“或”、“异或”。从表面上看似乎有点像逻辑运算符,但逻辑运算符是针对两个关系运算符来进行逻辑运算,而位运算符主要针对两个二进制数的位进行逻辑运算。下面...
  • 这里有个比较详细得解答版本,很清楚,各位移步吧! https://www.cnblogs.com/shuaiding/p/11124974.html
  • 一、逻辑运算符 运算符 含义 ...逻辑,运算符左右两边都要执行 ...逻辑,左边为false,右边不用执行 ...二、位运算符 位运算符主要针对二进制,逻辑运算符是针对两个关系运算符来进行逻辑运算 ...
  • Java位非~运算符详解

    千次阅读 2019-05-29 11:06:34
    java中int数据类型一般是四个字节,一个字节8,一个完整的int类型是32。 在计算机内是以二进制进行存储的,计算机在存储某个数据时,是存储的数据的补码。 补码原码关系:正数补码原码相同,负数补码是...
  • 1.6 运算        运算是指对二进制数的运算,运算虽然在工作中很少用到,但是其作用很...运算是指两个二进制数相同同时为1则结果为1。 System.out.println(Integer.toBi

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 254
精华内容 101
关键字:

位运算符Java与详解