为什么要用二进制?
因为计算机从节省制造成本角度考虑,选择了二进制。因此计算机内存中一切数据都是以二进制存在的。
那么问题来了,为什么在Java中我们使用输出语句时显示在Consle窗口中的还是十进制的数呢?例如:
int n = 6;
System.out.println(n);
运行结果:6 。
在解释这个原因之前要先了解两个方法
①Integer.toString() 将内存中二进制数据转换为十进制输出
②Integer.parseInt() 将十进制字符串转换为二进制数据
原因: 通过查询源码知道在输出语句System.out,println()中它自动调用了Integer.toString() 。所以输出结果还是6。
什么是二进制?
逢二进一的计数规则。
例如int类型(32位)6的表示:
00000000 00000000 00000000 000000110
int a = 6;
System.out.println(Integer.toBinaryString(a));
//运行结果:110
//原因:计算机自动省略了前面的29个0。
什么是16进制?为什么要使用16进制?
逢16进1的计数规则:
逢16进1
数字:0 1 2 3 4 5 6 7 8 9 a(10) b (11 ) c(12) d(13) e(14) f(15)
十六进制数为了便于区分都是以0x开头。
使用十六进制的目的:
用于简写2进制,原因是2进制的书写过于冗长,2进制的每4位缩写为一个16进制数,按照这个规则可以将2进制进行简写。
记住:编程时,凡是需要书写2进制数据时,都采用16进制作为缩写。
比如int类型数为32位,如果用2进制表示则需要32位。
例:
0000 0000 0010 1010 1110 1111 1110 1010
使用16进制进行缩写结果为:
0 0 2 a e f e a 即:0x2aefea
int n = 0x2aefea;
System.out.println(Integer.toBinaryString(n));
//运行结果:10 1010 1110 1111 1110 1010(计算机自动省略了前面的10个0)
为什么要用补码?
补码可以理解为是一种用“正数”表示“负数”的“算法”。节省了硬件成本!!!
切记: 在Java中是使用补码来表示二进制负数的,在补码表示中,最高位为符号位,正数的符号位为0,负数1。
如何求一个数的补码?
正数的原码,补码,反码都一样。无需多说。
那么如何求一个负数的补码呢?例如:求-1的补码。
第一步:先写出1的原码(以8位为例):0000 0001
第二步:求这个原码的反码:1111 1110
第三步:补码就是给反码加1。即:1111 1111 。
int n = -1;
System.out.println(Integer.toBinaryString(n));
//运行结果:1111 1111 1111 1111 1111 1111 1111 1111