前言
最近在读JDK源码,发现HashMap里面存再大量的逻辑运算,而Java逻辑运算其实在我实际的开发当中用的相当的少,有些甚至还看不太懂,下面记录一些我读源码的时候遇到的一些逻辑运算。
>> 和 >>>
例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| public class JavaLogic { public static void main(String[] args) { int a = -10; outBinaryString(a); outBinaryString(a >> 1); outBinaryString(a >>> 1); }
public static void outBinaryString(int a) { System.out.printf("%20d --> ", a); print(a); System.out.println(); }
public static void print(int num) { for (int i = 31; i >= 0; i--) { System.out.print((num & (1 << i)) == 0 ? "0" : "1"); } } }
|
运行Main方法打印出如下结果
1 2 3
| -10 --> 11111111111111111111111111110110 -5 --> 11111111111111111111111111111011 2147483643 --> 01111111111111111111111111111011
|
相关源码
java.util.HashMap#hash
1 2 3 4
| static final int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16); }
|