一、计算机系统进制概述
- 数制是用一组固定的符号和统一的规则来表示数值的方法。
- 计算机底层使用的数制是二进制。
- 用Java编程使用的是十进制。Java底层仍使用二进制。
- 计算机常用的数制还有八进制和十六进制。
1、十进制
十进制的基本数字0~9,逢十进位。
10称做“基数”,10^n(10的n次幂)被称做“权”。
10000 = 1 x 10^4
1000 = 1 x 10^3
100 = 1 x 10^2
10 = 1 x 10^1
1 = 1 x 10^0
示例:
23678(10进制) = 2*10000+3*1000+6*100+7*10+8*1
= 2*10^4 +3*10^3+6*10^2+7*10^1+8*10^0
= 23678
2、二进制
二进制的基本数字是0、1,逢2进位。
二进制的基数为2,权为2^n(2的n次方)。
1 = 1 x 2^0
10 = 1 x 2^1
100 = 1 x 2^2
1000 = 1 x 2^3
10000 = 1 x 2^4
100000 = 1 x 2^5
1000000 = 1 x 2^6
10000000 = 1 x 2^7
示例:(1111)2=(——)10(二进制转化成十进制)
(1111)2 = 1x2^3+1x2^2+1x2^1+1x2^0 = 8+4+2+1 = 15
3、十六进制
- 基本数字:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F
- 特点:逢十六进位
- 十六进制是二进制的简写,方便专业人员书写二进制数据。
- 16进制的基数为16,权为16^n(16的n次方)。
- 在Java代码中十六进制数用0X或0x做前缀(0是数字零,而不是字母o)。
0x1000 = 1 x 16^3
0x100 = 1 x 16^2
0x10 = 1 x 16^1
0x1 = 1 x 16^0
示例:(5E)16 = (——)10(十六进制转化成十进制)
5 x 16^1+14 x 16^0 = 80+14 = 94
二、十六进制与其它进制的转换
1、十六进制转化为十进制
(41)16 = (——)10
4x16^1+1x16^0 = 65
2、十六进制转化为二进制
(41)16 = (——)2
(0100 0001)2
说明:16进制的1位数代表2进制的4位数
三、二进制与其它进制的转换
1、二进制转化为十进制
(10110)2 = (——)10
1x2^4+1x2^2+1x2^1 = (22)10
2、二进制转化为十六进制
规律:四位二进制数相当于一位十六进制数。
(1101 0110)2 = (——)16
分别将1101和0110转化成十进制数,是13和6;13是十六进制中的D
1101 0110 = (D6)16
3、习题
已知:计算机的基本存储单位是字节(byte),一个字节有8位。8位二进制的最大值 = (1111 1111)2 。 编写程序,计算并显示8位二进制数的最大值,即将(1111 1111)2转换为十进制数。
解题思路(1):
(1111 1111)2 = 1x2^7+1x2^6+1x2^5+1x2^4+1x2^3+1x2^2+1x2^1+1x2^0
代码:
System.out.println(Math.pow(2, 7)+
Math.pow(2, 6)+
Math.pow(2, 5)+
Math.pow(2, 4)+
Math.pow(2, 3)+
Math.pow(2, 2)+
Math.pow(2, 1)+
Math.pow(2, 0));
解题思路(2):
(1111 1111)2 = (10000 0000)2 - 1
1x2^8-1
代码:
System.out.println(Math.pow(2, 8)-1);
四、十进制与其它进制的转换
1、十进制转换为二进制
规律:不断除以2,保留余数,商为0时不再除2。将所有余数倒序排列
示例:
(13)10 = (——)2
13/2
商 6 余数 1
6/2
商 3 余数 0
3/2
商 1 余数 1
1/2
商 0 余数 1
结果: (13)10 = (1101)2
2、十进制转换为十六进制
规律:不断除以16,保留余数,商为0时不再除16。将所有余数倒序排列
示例:
(138)10 = (——)16
183/16
商 8 余数 10 A
8/16
商 0 余数 8
结果: (138)10 = (8A)16