1、计算机所有的位操作都是针对 操作数的补码进行 操作 得到的结果也是补码。
2、对正数而言 原码=反码=补码 对负数而言:补码=反码+1 反码=源码除符号位(1)外取反
3、为什么这么设定? 计算机为了保证相反数二进制存储相加结果为0
如果没有补码: 4 二进制:0000 0100 -4二进制:1000 0100 二者直接相加 1000 1000 结果是 -8
如果使用补码运算: 4 二进制:0000 0100 -4二进制:1000 0100 补码为 1111 1100 二者补码直接相加 0000 0000 结果是 0 从而方便了计算机计算
static void bitCaculate(){
System.out.println(~4);// 0000 0100 全部取反 1111 1011 是 -5 的补码 结果是 -5
System.out.println(~-5);// 1000 0101 补码为 1111 1011 取反 0000 0100 是 -5 的补码 结果是 4
//
int n=100; //0000 1101 0000 0110 0000 1111 1111
System.out.println("a".hashCode());
System.out.println(new BigInteger("97",10).toString(2));
System.out.println(tableSizeFor(100));
}