1.进制
在java 程序中支持几种进制的数据。
十进制:100
十六进制:0x10
八进制:012
二进制(jdk1.7版本之后才支持):0b1010
十进制:
特点:逢十进一,一个十进制位最大为9.一位的取值范围为 [0-9] 闭区间
二进制:
特点:逢二进一,一个二进制位最大为1,一位的取值范围为 [0-1] 闭区间
八进制:
特点:逢八进一,一个八进制位最大为7,一位的取值范围为[0-7] 闭区间
十六进制:
特点:逢16进一,一个十六进制位最大为15 [a-f] 代表 [10-15] 大小写均可。 一位的取值范围为[0-F] 闭区间
0-15 使用四种进制表示
2.机器码:原码、反码、补码
原码:
10--->0b1010
用最高位来代表符号位,0代表正数,1代表负数。
约定使用一个字节来代表一个数。
规则:最高位为符号位 0代表正数 1代表负数 后面所有的位都是数值位。
原码的
10:00001010
-10:10001010
+0: 0000_0000
-0: 1000_0000
反码:
正数:反码和原码一致
负数:规则:符号位不变,其他的数值位全部0--->1 1--->0
-10:
10001010--->11110101
补码:计算机使用补码存储数据。
规则:
正数:正数的补码和原码一致,和反码也一致----三码合一。
负数:
规则:先求负数的原码--->求反码--->+1 ---->补码
-1:
1000 0001--反码--> 1111 1110--求补 +1 --> 1111 1111
原因:为何使用补码:
1:没有+0 和 -0 之分
0000 0000
-0 :1000 0000--->1111 1111 + 1 ---> 1 0000 0000
2:使用补码,最高位的符号位,计算机并没有把最高位当作符号位来处理,而是当作普通的数值位来处理的。会简化cpu的设计。
补充一点:
补码的补码是原码。
3.进制的转换
1010101--->十进制
123----> 1* 10^2 + 2*10^1 + 3*10^0 == 100+ 20 +3
1010101 ----> 1*2^0 + 1* 2^2 + 1* 2^4 + 1* 2^6 = 1+4+16+64 = 85;
0xfa1 ---> 15*16^2 + 10*16^1 + 1*16^0 = 3840+160+1 = 4001。
任何的进制--->10进制 都可以使用展开乘以以该进制为底数的次幂的形式。如上所示。
10---->2.
67
十进制到二进制:除二取余法。逆序排列。
八进制 十六进制 和 二进制之间的相互转换。
例如:
0xff<--->1111 1111
0x11a<--->0001 0001 1010
0117<--> 1001111
总结:二进制和十六进制 是 4bit ---对应一个16进制位
二进制和八进制 是 3bit ---对应一个8进制位