• Java学习之位运算和逻辑运算符


    今天看了一下HashMap类的源码,在HashMap的源码中定义了初始空间的大小

    static final int DEFAULT_INITIAL_CAPACITY = 1 << 4;

    当我看到了 1<<4 我就不知道是什么意思了,于是百度了一下,下面讲解一下原理:

    1.表示方法:  

    在Java语言中,二进制数使用补码表示,最高位为符号位,正数的符号位为0,负数为1。补码的表示需要满足如下要求。  

    (1)正数的最高位为0,其余各位代表数值本身(二进制数)。  

    (2)对于负数,通过对该数绝对值的补码按位取反,再对整个数加1。 

    2、位运算符:位运算符有 >> << >>>

    就用刚刚问题来做一个例子:1的二进制编码是 0000 0001,<<运算符的意思是将运算对象左移4位,那么进行1<<4操作以后,二进制编码就

    编程了0001 0000,对应的十进制是16.

    关于逻辑运算符的使用,比较特殊的是^(按位异或操作符),运算规则: 参与运算的两个值,如果两个相应位相同,则结果为0,否则为1。即:0^0=0, 1^0=1, 0^1=1, 1^1=0 

    通过该位运算可以实现值得交换

         int a=10;
            int b=5;
            
            a=a^b;
            b=b^a;
            a=a^b;
            System.out.println(a);
            System.out.println(b);

    运算结果是a=5;b=10;

    原理解释: 运算操作       a的二进制        b的二进制

          初始化        1010              0101

          a=a^b       1111              0101

          b=b^a       1111              1010

          a=a^b       0101              1010

    通过计算以后a和b的值互换。

  • 相关阅读:
    019. Remove Nth Node From End of List
    021.Merge Two Sorted Lists
    自定义starter
    servlet里面转发与重定向
    贪婪模式与非贪婪模式
    localstack 线程隔离
    Algorithm & Data structure
    some interview question
    阿里-菜鸟国际-出口大团队招新啦
    JDK8漫谈——集合更强大
  • 原文地址:https://www.cnblogs.com/googlemeoften/p/4962564.html
Copyright © 2020-2023  润新知