什么是2进制
-
逢二进一的计数规则
-
如何将2进制转换为10进制?
- 将一个2进制数每个1位置的权值累加即可
-
Java 所有的变量\常量存储的都是2进制数!
什么是16进制
- 逢16进1的计数规则
- 因为2进制的书写太繁琐麻烦
- 所以常常用16进制来缩写2进制数字
- 怎么缩写:将2进制从最低位开始,每4位2进制缩写为1位16进制
补码
-
计算机中处理有符号数(正负数)的一种编码方式,java中的补码最小类型是int,32位数
-
以4位2进制为例讲解补码的编码规则:
- 计算的时候如果超出4位数就自动溢出舍弃,保持4位数不变
- 将4位2进制数分一半作为负数使用
- 最高位称为符号位,高位为1是负数,高位为0是正数
int n = -3; System.out.println(Integer.toBinaryString(n)); /* 规律数: 1)0111为4位补码的最大值,规律是1个0和3个1,可以推导出: 32位补码的最大值,是1个0和31个1-----(011111111...) 2)1000为4位补码的最小值,规律是1个1和3个0,可以推导出: 32位补码的最小值,是1个1和31个0-----(100000000...) 3)1111为4位补码的-1,规律是4个1,可以推导出: 32位补码的-1是,是32个1------------(11111111...) */ int max = 2147483647; //int的最大值 int min = -2147483648; //int的最小值 System.out.println(Integer.toBinaryString(max)); //011111... System.out.println(Integer.toBinaryString(min)); //100000... System.out.println(Integer.toBinaryString(-1)); //11111...
-
深入理解负值:
记住-1的编码是32个1 用-1减去0位置对应的权值 -
互补对称:
公式:-n=~n+1 结论:一个数的补码=这个数取反+1 举例说明:int n = -3; int m = ~n+1; System.out.println(m); //3 -3的补码就是-3取反+1
~ 取反
& 与运算
| 或运算
>>> 右移位运算
<< 左移位运算
补充:
权: 64 32 16 8 4 2 1
1 1 0 0 1 0 0 = 100 右移位
1 1 0 0 1 0 = 50
1 1 0 0 1 = 25
1 1 0 0 = 12
权: 64 32 16 8 4 2 1
n 0 1 0 1 = 5
m 0 1 0 1 = 10
k 0 1 0 1 = 20
int n = 5;
int m = n<<2;
System.out.println(m); //20