一、计算机中的数据
各种进制
不同进制本质上没有区别,都可以表示任意数字。任务的给不同进制规定了一些"符号":
- 二进制:0~1
- 八进制:0~7
- 十进制:0~9
- 十六进制:0~9,A~F
十进制
十进制的表示方式为0,1,2,3,4,5,6,7,8,9
低位和高位的关系:逢10进1
十进制数中每一位都是10的整数次幂
表示的符号:D
例:266.11D = 2*10^2+6*10^1+6*10^0+1*10^(-1)+1*10^(-2)
二进制
二进制中只有0和1
低位和高位的关系:逢2进1
二进制数中每一位都是2的整数次幂
表示符号:B
例:1010.11B = 1*2^3+0*2^2+1*2^1+0*2^0+1*2^(-1)+1*2^(-2)
八进制
八进制的表示方式为:0,1,2,3,4,5,6,7
低位与高位的关系:逢8进1
每一位都是8的整数次幂
表示符号:O
例:389.2 O = 3*8^2+8*8^1+9*8^0+2*8^(-1)
十六进制
十六进制的表示方式:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
低位和高位的关系:逢8进1。
每一位都是16的整数次幂
表示符号:H
例:8D2.7 H = 8*16^2+13*16^1+2*16^0+7*16^(-1)
进制之间的转换
了解完各种进制后,我们接下来就要了解一下各种进制之间的转换
十进制转为二进制
将十进制转换为二进制,使用的方法是逆序取余法。
逆序取余法:我们使用10进制数5678进行来做示例
- 用5678除以10得到商:567,余:8
- 将上一次得到的商除以10得到商:56,余:7
- 将上一次得到的商除以10得到商:5,余:6
- 将上一次得到的商除以10得到商:0,余:5
我们将得到的余数逆序来看就是5678,由于每一位都是小于10的数,所以我们每次除10 都能得到最低为上的数字作为余数。
用以上的方法转二进制是这样的:我们将10进制数每次都除以2,得到余数,我们将余数逆序来看就是2进制数,接下来我们就来试试
2|185 余数
2|92 1
2|46 0
2|23 0
2|11 1
2|5 1
2|2 1
2|1 0
2|0 1
我们逆序取到余数,得到的数为101101001
,这个就是十进制数185的二进制表示,还是有点不容易的。
当我们遇到十进制转二进制带有小数的时候,我需要对小数进行正序取整的方法。
正序取整:
例如:1.125
0.125*2 = 0.25 取整数部分0
0.25*2 = 0.5 取整数部分0
0.5*2 = 1 取整数部分1
最终我们得到二进制的结果是1.001
八进制转十六进制
我们刚才在十进制转二进制的时候,比较麻烦,需要对2一直取余,但是在八进制转二进制和十六进制转二进制的时候非常简单,我们八进制和十六进制互转的时候,只要知道二进制就异常简单了。
首先我们试以下二进制转八进制
1 110 001 111.001 1 二进制
1 6 1 7 . 1 4 八进制
二进制转进制的规则是:
整数部分从低位到高位每3位来表示八进制中的一位,不足三位的用0来补,比如我们这二进制数最高位是1
,补位后就是001
小数部分从高位到低位每3为来表示八进制中的一位,不足三位的用0来补,就像上面小数后面的最后一位1
,由于后面不足三位,所以我们在其后面补充三位变为100
,也就是4
最终我们可以得到二进制数1110001111.0011
对应的八进制数是1617.14
接着我们来看看二进制转十六进制
1 1110 1111 0010 二进制
1 E F 2 十六进制
我们不难发现二进制转十六进制和八进制转二进制相似,不过转换的位数由3位变成了4为,看完了八进制和十六进制对二进制的转换后,是不是发现我们可以通过转换其为二进制,来进行八进制和十六进制的转换!
通过上面的介绍后,可以发现:
- 八进制:可以用一个八进制来表示三个二进制位
- 十六进制:可以用一个十六进制来表示四个二进制位
- 我们使用十进制来表示二进制的时候,虽然我们比较熟悉也可以缩短位数,但是二进制和十进制之间的转换比较麻烦,这时候八进制和十六进制的优势就显示出来了,他们不但可以缩短二进制的位数,还可以简单和二进制进制转换,这就是为什么有八进制和十六进制的原因。
原码、反码、补码
这里我们简单介绍一下原码、反码、补码
正数:正数的原发、反码、补码都是一样的
负数:
- 原码:最高位不变,后面数据和其绝对值相同
- 反码:将原码除最高位,其余按位取反
- 补码:反码加一
例如:
1 111 1010 -7A
1 000 0101 (反码)
1 000 0110 (补码)
注:为了表示正数和负数,最高为是符号为,0为正数,1为负数
其他一些概念
位是计算机中最小的单位,他表示一个二进制数,0或者1,英文是bit。
字长是CPU的主要技术指标之一,指的是CPU一次最大可能并行处理的二进制数。
我们平常可能接触到byte这个概念,他与位不同的是:
byte表示字节,一个字节是8位,
word是两个字节,也就是16位,
dword是四个字节,也就是32位。