目录
1 数字的二进制
我们知道计算机只认识0和1,数字在计算机中就是以二进制表示的。这里提到三个概念:原码、反码和补码。数字的表示形式就是补码,即我们平时在代码中看到的所谓的某个数字的二进制表示就是说这个数字的补码。
1.1 正数
正数的原码、反码和补码都是一样的,比如int值5的的原码、反码和补码都是:
00000000 00000000 00000000 00000101
所以5在计算机中的表示也是00000000 00000000 00000000 00000101。
1.2 负数
先说3点概念:
- 负数的原码:按照绝对值大小转换成的二进制数,然后最高位补1。
- 负数的反码:原码除最高位,其余位取反。
- 负数的补码:反码+1。
-5的原码为: 10000000 00000000 00000000 00000101。
-5的反码为:11111111 11111111 11111111 11111010。
-5的补码为:11111111 11111111 11111111 11111011。
补码11111111 11111111 11111111 11111011就是-5在计算机中的表示。
注意:负数的补码转换为十进制的步骤就是把计算补码的步骤反过来,即:先将-5的补码-1,然后除符号位取反,最终计算即可。
2 二进制转十六进制
四位二进制对应一位16进制,按顺序求就行。
3 Java中的运算符
一般用于二进制的运算。
3.1 与运算符&
双目云算符。两个位数中位都为1,结果才为1,否则结果为0。
3.2 或运算符|
双目云算符。两个位数中只要有一个为1,那么结果为1,否则结果为0.
3.3 非运算符~
单目云算符。所有位取反(0取1,1取0)。
3.4 异或运算符^
双目云算符。两个位数相同结果为0,不同结果为1。
3.5 位移运算符<<
将一个数的各二进制位全部左移N位,右补0。如10<<2,10的二进制为0000 0000 0000 1010,结果为0000 0000 0010 1000,即40。
3.6 位移运算符>>
将一个数的各二进制位全部右移N位,移到右边的低位被舍弃,对于无符号数高位补0,负数高位补1。如10>>2,10的二进制为0000 0000 0000 1010,结果为 0000 0000 0000 0010,即为2;如-10>>2,-10的二进制为1111 1111 1111 0110,结果为1111 1111 1111 1101,十进制(转换方法见1.2)结果为-3。
3.7 位移运算符>>>
不带符号的将一个数的各二进制位全部右移N位,移到右边的低位被舍弃,统一补0。如-10>>>2,-10的二进制为1111 1111 1111 0110,,结果为:0011 1111 1111 1101,即16381。