软件评测师学习笔记《计算机系统过程及硬件基础知识》part1
作者:互联网
内容
1,数制转换
2,数的表示
3,计算机的组成
4,基本概念
5,流水线
6,输入输出
7,存储体系
8,校验码
一、数制转换
十进制数321十进制计算,可以发现,进制数都可以算回来
R进制转10进制,使用方法为按权展开法
将R进制数的每一位数值用R^k形式表示
对于负数次方,绝对值取反,2^2次方为4,2 ^-2次方为1/4
二进制转十进制10100.01=12^4+12 ^2+12 ^-2=16+4+1/4=20.25
八进制转十进制604.01=68^2+4* 8 ^0+18 ^-2=664+41+11/64=388.015625
**十进制小数转R进制小数,方法为乘R取整,每次乘以相应之后基数后取结果的整数部分即可。直到全为正整数为止,需要注意的是并非所有的十进制小数都能完全转化为R进制小数,这时就需要取近似值。
例: 8进制388.015625转十进制
小数部分
0.0156258=0.125 取整数部分0
0.1258=1 取整数部分1(小数部分就是0了)
0*8=0 取整数部分0(小数部分还是0)
。。。。。一直可以计算下去
以上可得十进制小数部分为0.01
整数部分
388/8 =48 余4
48/8 =6 余0
6/8=0 余6
所以8进制388.015625转十进制为604.01,整数部分计算得倒着写,小数部分得正着写
1.1数的转换观察上图可以发现,数的转换除了可以先转10进制,再转8或16进制计算外,还可用上述方法计算
解析:首先二进制的基数,只有0和1,如果是两位二进制,那么就有4个组合,可以表示4进制基数(0-3),如果是3位二进制,也就是8进制,8进制中(0-7的二进制表示)如下
000(0=0)
001(1 * 2^0 =1)
010(1 * 2 ^1=2)
011(1 * 2 ^1+1 * 2^0 =3)
100(122=4)
101(122+1 * 2^0 =5)
110(122+1 * 2 ^1=6)
111(122+1 * 2 ^1+1 * 2^0 )=7
观察以上,就很清楚了,2进制数转8进制数,8进制数有2^3 次方个基数
那么就有8种组合,可以表示8进制的基数(0-7),每个基数有三位二进制数组成
那么,二进制数10001110,可以从右往左进行分组,分成(010),(001),(110),头部10不够分,用0补齐三位,也就是说转为8进制是216
那么,16进制数同理,为2^ 4次方个组合,每个基数需要4位二进制数来表示,基数分别为0-9,a,b,c,d,e,f
10001110的16进制分组为4位一组(1000)(1110),计算得为1000=1*2^3=8,1110=1 *2 ^3+1 * 2^2+1 *2^1=8+4+2=14,16进制中14用E表示,所以转为16进制表示为8E
反过来计算,8进制216转二进制,把三位拆开来(2)(1)(6)分别用二进制表示,变成(010)(001)(110),也就是010001110,二进制是两个一组的,开头的0取消掉,就成了10001110
反过来计算,16进制数8E转二进制,把两位拆开来(8)(E),分别用二进制表示,变成(1000),(1110)
二、存储相关概念和数的表示
**机器数的特征:**机器数是由二进制表示的,小数点不需要占位来存储,最高的二进制位表示的是正负符号,0为正数,1为负数
**原码:**以二进制表示的编码制(用8位二进制表示一个数值),如上图1就表示为00000001,补全8位,如果是-1,则为10000001
原码做加法计算发现,1+(-1),首位相加为1,表示结果为负数,末位相加变为10(因为逢2进1)结果会为10000010,转为10进制为-1(1*2^1)=-2,所以原码不适合做加减法操作
**反码:**正数的反码等于原码,负数的反码,除符号位外,其它位按位取反,-1的的原码(10000001),反码(11111110)
反码做加法运算,1+(-1)=(00000001)+(11111110)=11111111(这是负多少懒得算了)可以看出也不适合做加减法操作
**补码:**正数的补码等于原码,负数的补码,先取反码,再在末尾位+1(变成了11111111)
补码做加法运算,1+(-1)=(00000001)+(11111111)=100000000,由于只能有8位,首位的1溢出了,结果就为00000000(+0),不用算也知道等于0,补码适合做加减法运算,因为补码可以直接把符号位带进去计算
**移码:**补码在表示浮点数时,会出现问题(跟考试无关,自行百度),所以需要移码来用于浮点数表示,补码的符号位取反,就得到了移码。
移码做加法运算,1+(-1)=(10000001)+(01111111)=100000000,看上去跟补码结果一样,首位溢出,结果为变为00000000,但是,移码符号位是需要取反的,计算出来的结果也需要取反,所以结果是10000000(-0)
整数数值范围
首先,这个n怎么来的呢
机器用8位二进制表示一个数值,那么n=8,原码的取值范围就是负(2^7-1)
2^7-1也就是–(128-1)127,也就是-127~~127
如果是用16位二进制表示,那么n=16,这样计算取值范围
n为什么要减1?
因为不管以多少位二进制表示一个数值,首位都是符号位,所以n需要-1
为什么原码,反码取值范围右边都得-1?
**个人理解:**正数范围-1是由于0也算正数,2^7=128,从0开始,所以需要-1,正数范围到127,
原码表示时,由于0的表示为00000000和10000000,负0也要占一个编码,所以负数那边也得-1
为什么补码,移码只需正方-1?
个人理解:补码表示时,正0表示为00000000,负0有10000000除符号位按位取反再末尾+1,变成100000000,1溢出,还是00000000,所以只有正0占位,正方-1,负0不占位,移码是补码的符号位取反,所以跟移码取值范围一样。
标签:计算机系统,进制,16,二进制,补码,基础知识,part1,移码,原码 来源: https://blog.csdn.net/tangzhu167/article/details/117383123