今天看了一下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的值互换。

Java学习之位运算和逻辑运算符的更多相关文章

  1. Java二进制和位运算,这一万字准能喂饱你

    基础不牢,地动山摇.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习.关注公众号[BAT的乌托 ...

  2. java位运算,逻辑运算符

    位运算逻辑运算符包括: 与(&),非(~),或(|),异或(^). &:  条件1&条件2  ,只有条件1和条件2都满足, 整个表达式才为真true,  只要有1个为false ...

  3. Java中的位运算

    昨天去面试的时候做到了一道Java的位运算题目,发现有个运算符不懂:">>>",今天特地查了一下,并小结一下常见的位运算符号: ~  按位非(NOT)(一元运算) ...

  4. java基础之位运算

    java中常见的位运算符:&(逻辑与) |(逻辑或) ~(取反) ^(逻辑异或) >>(右移) <<(左移) >>>(无符号右移) &(逻辑与 ...

  5. java ----> 基础之位运算

    package test.ant; import java.util.Arrays; import java.io.UnsupportedEncodingException; public class ...

  6. Java 基本数据类型 && 位运算

    1. Java基本数据类型 1.1 数据类型示意图 类型 字节数 范围 byte 1 -128~127 short 2 -32768~32767 int 4 -231~231-1 long 8 -26 ...

  7. Java中的位运算及简单的算法应用介绍

    众所周知,计算机底层是二进制.而java作为一门计算机编程语言,也对二进制的位运算提供了完整的支持. 在java中,int是32位的,也就是说可以用来实现32位的位运算.方便起见,我们一般用16进制对 ...

  8. java中通过位运算实现多个状态的判断

    通过 <<  |  & ~ 位运算,实现同时拥有多个状态 通过 << 定义数据的状态 public interface LogConstants { /** * 消耗标 ...

  9. php学习笔记位运算

    位运算 源码:用二进制表示一个数,这个码就是源码. 比如2====00000000 00000000 0000000 00000010 正数的反码 源码 补码都一样 负数的源码是符号位取反.第一个位  ...

随机推荐

  1. 各种排序算法(C语言)

    #include <stdlib.h> #include <stdio.h> void DataSwap(int* data1, int* data2) { int temp ...

  2. safari的调试工具

    safari的调试工具默认是没有打开的设置——>偏好设置——>高级———>在菜单栏中显示开发菜单

  3. HDU 5730 Shell Necklace(CDQ分治+FFT)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5730 [题目大意] 给出一个数组w,表示不同长度的字段的权值,比如w[3]=5表示如果字段长度为3 ...

  4. andrewchilds/jQuery.DomOutline

    andrewchilds/jQuery.DomOutline DOM - 使用Javascript:让用户选择一个类似Firebug的HTML元素? -

  5. 我的MYSQL学习心得 备份和恢复(详细)

    备份 逻辑备份方法 使用MYSQLDUMP命令备份 MYSQLDUMP是MYSQL提供的一个非常有用的数据库备份工具.mysqldump命令执行时将数据库备份成一个文本文件, 该文件中实际上包含了多个 ...

  6. Android 架构【转】

    import java.util.ArrayList; import java.util.List;   import android.app.Activity; import android.app ...

  7. linux进程之fork 和 exec函数

    ---恢复内容开始--- fork函数 该函数是unix中派生新进程的唯一方法. #include <unistd.h> pid_t   fork(void); 返回: (调用它一次, 它 ...

  8. css--技巧整理(1-13)

    (更新中) 1.取消浏览器form中默认样式 a.chrome下input和textarea的聚焦边框 input,button,select,textarea{outline:none}  b.取消 ...

  9. JS闭包经典例题

    上一篇文章谈论了闭包的概念和一些应用,并给出一个例题,这篇文章就此道例题进行讨论. function fun(n,o) { console.log(o); return { fun:function( ...

  10. Web学习之自定义标签

    1.编写一个实现Tag接口的Java类(标签处理器类) package me.gacl.web.tag; import java.io.IOException; import javax.servle ...