目录
软考学习
计算机组成与体系结构
数据的表示
R进制转十进制使用按权展开法
其具体操作方式为:
将R进制数的每一位数值用Rk(R的k次方)形式表示,即幂的底数是R,指数为k,k与该位和小数点之间的距离有关。当该位位于小数点左边,k值是该位和小数点之间数码的个数,而当该位位于小数点右边,k值是负值,其绝对值是该位和小数点之间数码的个数加1。
具体步骤如下:
- 将R进制数从右到左按位展开,每一位数字与其对应的权重进行相乘。
- 权重从右到左依次为R^0, R^1, R^2, R^3, …,其中R为进制数。
- 计算每一位数字与对应权重的乘积,并将结果累加得到十进制数的值。
举个例子,假设要将二进制数1101转换成十进制数:
- 从右到左按位展开,即1、1、0、1。
- 权重从右到左为20=1、21=2、22=4、23=8。
- 计算乘积:1 * 1 + 1 * 2 + 0 * 4 + 1 * 8 = 1 + 2 + 0 + 8 = 11。
所以二进制数1101转换为十进制数为11。
十进制转R进制使用短除法
具体步骤如下:
- 选择要转换的十进制数作为被除数,选择R作为除数。
- 进行除法操作,将被除数除以除数得到商和余数。
- 余数即为R进制数的最低位数字。
- 将商作为新的被除数,重复步骤2和步骤3,直到商为0为止。
- 将得到的余数按照从下到上的顺序排列,即为转换后的R进制数。
举个例子,假设要将十进制数45转换成八进制数:
- 选择被除数为45,选择除数R为8。
- 45 ÷ 8 = 5 余 5,所以最低位是5。
- 将商5作为新的被除数,继续进行除法操作。
- 5 ÷ 8 = 0 余 5,所以次低位也是5。
- 商为0,所以停止计算。
- 将得到的余数按照从下到上的顺序排列,即为转换后的八进制数,此例中为55。
所以十进制数45转换为八进制数为55。
例如将94转换为二进制数。【最后不被2整除的1,直接进入到二进制中】
二进制转八进制与十六进制数
二进制转换为八进制数的步骤如下:
- 将二进制数从右到左每三位一组进行分组。如果最左边的组不足三位,可在左边补0。
- 将每组的二进制数转换为对应的八进制数字。
- 将每组的八进制数字按照从左到右的顺序排列,即为转换后的八进制数。
举个例子,假设要将二进制数1011101转换为八进制数:
- 分组:010 111 101。
- 对应的八进制数字分别为2 7 5。
- 将八进制数字按照从左到右的顺序排列,得到转换后的八进制数为275。
所以二进制数1011101转换为八进制数275。
转换为十六进制数的步骤类似,但是每组对应于十六进制数的一位。
二进制转换为十六进制数的步骤如下:
- 将二进制数从右到左每四位一组进行分组。如果最左边的组不足四位,可在左边补0。
- 将每组的二进制数转换为对应的十六进制数字。
- 将每组的十六进制数字按照从左到右的顺序排列,即为转换后的十六进制数。
原码反码补码移码
原码->反码->补码->移码 后面的每一步都是在前一步的基础上去实现的
-
原码是数值的直接表示形式,用最高位表示符号,其余位表示数值的绝对值。
-
反码是在原码的基础上,将正数的反码保持不变,而负数的反码是将原码中除符号位以外的每一位取反。(最左边第一位数字表示正负,0为正,1为负)
-
补码是在反码的基础上,将正数的补码保持不变,而负数的补码是在反码的基础上加1。
-
移码是在补码的基础上,将符号位取反,即正数的移码与补码相同,而负数的移码是在符号位上添加1。
这四种表示方法都是用于表示有符号整数的编码形式,其中原码通常用于人类可读的形式,而反码、补码和移码主要用于计算机内部运算。它们的使用可以解决了在使用原码表示负数时出现的计算问题,特别是在进行加减法运算时的处理。
浮点数运算
1、小数点前只能有一位数字
2、两指数不同的浮点数相加,应把指数低的数转换为高指数,在进行相加
如上题:
流水线周期:为执行时间最长的一段,固为2ns
指令全部执行所需时间:每一条指令执行的时间+(总指令条数-1)* 流水线周期,
为2+2+1+(100-1)* 2 = 203(理论结果)
如答案未给出这个结果,再改用实践公式再试一遍
(流水线分成了几部分 +(总指令条数-1))* 流水线周期,即(3+(100-1))* 2 = 204
流水线吞吐率计算
- 吞吐率:指令条数 / 流水线执行时间
- 指令条数:题目所设想总共有多少条指令
- 流水线执行时间:同样分为理论和实践,一般我们所选用理论:每一条指令执行的时间+(总指令条数-1) 流水线周期*
- 流水线最大吞吐率=1 / 流水线周期
依照上面那道例题,吞吐率TP 就等于 100/203
而流水线最大吞吐率=1 / 流水线周期,为1 / 2
流水线的加速比
- 流水线的加速比 = 不使用流水线执行时间/使用流水线执行时间
- 不使用流水线执行时间 = 各部分所花费的时间总和 * 总指令数
例题中去求不使用流水线执行时间 = 各部分所花费的时间总和 * 总指令数
= (2 + 2 + 1)* 100 = 500
所以流水线的加速比 = 不使用流水线执行时间/使用流水线执行时间
= 100 / 500 = 1 / 5
流水线的效率
- 流水线的效率 = 流水线的设备利用率
- 流水线的效率 = n个任务占用的时空区 / k个流水段的总的时空区
- n个任务占用的时空区 : 每个任务所占用的时空区相加 * n(任务数)
- k个流水段的总的时空区 : 时空图中最大的时空区数 * n(任务数)
例题中,求n个任务占用的时空区 : 每个任务所占用的时空区相加 * n(任务数):(t + t + t +3t)*4 = 24t
k个流水段的总的时空区 : 时空图中最大的时空区数 * n(任务数):15t * 4 = 60t
故流水线的效率 = n个任务占用的时空区 / k个流水段的总的时空区 :15t / 60t = 1 / 4