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的值互换。