zoukankan      html  css  js  c++  java
  • 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的值互换。

  • 相关阅读:
    Zookeeper安装部署
    dubbo/dubbox部署资料收集
    Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
    ios开发--清理缓存
    从零开始,让你的框架支持CocoaPods
    iOS 开发-- Runtime 1小时入门教程
    iOS 开发--github的demo
    linux 防火墙iptables简明教程
    利用BBRSACryptor实现iOS端的RSA加解密
    iOS开发--数组
  • 原文地址:https://www.cnblogs.com/googlemeoften/p/4962564.html
Copyright © 2011-2022 走看看