计算机组成原理计算篇专项练习

习题

1.除了十进制以外,这个世界上常见的还有什么进制?

  • 我的答案
    8进制,16进制
  • 标准答案
    二进制、八进制、十二进制、二十进制、六十进制。

2.二进制一般使用什么方法转换成十进制?

  • 我的答案:
    按权展开法

3.十进制一般使用什么方法转换成二进制?

  • 我的答案
    重复相除法
  • 标准答案
    整数:重复相除法,小数:重复相乘法。

4.计算机直接使用原码计算有什么缺点?

  • 我的答案
    使用符号位表示正负数的时候,0表示正数,1表示负数。采用这种表示方式表示0的时候,由于+0和-0都可以表示为0,所以出现了两种表示方法00和10,有歧义。
  • 标准答案
    0有两种表示方法,减法运算复杂。

5.请计算12、124、1023、-1、-127的二进制原码。

  • 我的答案
    12的二进制原码为1100
    124的二进制源码为1111100
    1023的二进制原码为1111111111
    -1的二进制原码为1,1
    -127的二进制原码为1,1111111
  • 标准答案
    12(0,00001100)、 124(0,01111100)、 1023(0,1111111111)、 -1(1,00000001)、 -127(1,01111111)。

6.计算机的补码解决了什么问题?

  • 我的答案
    解决了原码表示有歧义的问题,将减法运算转化成加法运算。
  • 标准答案
    相比原码的运算过程(特别是减法),补码对于计算机而言运算更加简单。

7.请计算12、124、1023、-1、-127的补码,并将其使用32位定点表示法和32位浮点表示法(1位符号位、8位阶码、23位数值位)表示出来。

  • 我的答案
    12的二进制原码为12(0,00001100)
    124的二进制源码为124(0,01111100)
    1023的二进制原码为1023(0,1111111111)
    -1的二进制原码为 -1(1,00000001)
    -127的二进制原码为-127(1,01111111)
    ++++++++++++++++++++++++++++
    12的二进制补码为0,00001100
    124的二进制补码为0,01111100
    1023的二进制补码为0,1111111111
    -1的二进制原码为1,11111111
    -127的二进制原码为1,10000001
    ++++++++++++++++++++++++++++
    ++++++++++++++++++++++++++++

8.你是否可以使用代码实现一个通用的计算器,可以将二进制数转换为十进制数,把十进制数转换为二进制数。

  • 我的答案
package cn.yemuxia.bean.lifecycle.test5;

/**
 * @author 史凯强
 * @date 2022/01/07 12:30
 * @desc
 **/
public class Test {
    public static void main(String[] args) {
        int result = binaryToDecimal(1110);
        System.out.println(result);
        int result1 = decimalToBinary(14);
        System.out.println(result1);
        decimalToBinary2(14);
    }

    public static int binaryToDecimal(int binaryNumber){

        int decimal = 0;
        int p = 0;
        while(true){
            if(binaryNumber == 0){
                break;
            } else {
                int temp = binaryNumber%10;
                decimal += temp*Math.pow(2, p);
                binaryNumber = binaryNumber/10;
                p++;
            }
        }
        return decimal;
    }

    public static int decimalToBinary(int n){
        int t = 0;  //用来记录位数
        int bin = 0; //用来记录最后的二进制数
        int r = 0;  //用来存储余数
        while(n != 0){
            r = n % 2;
            n = n / 2;
            bin += r * Math.pow(10,t);
            t++;
        }
       return bin;
    }

    public static void decimalToBinary2(int n){
        for(int i = 31;i >= 0; i--){
            System.out.print(n >>> i & 1);
        }
    }
}

在这里插入图片描述

9.计算机为了判断运算溢出使用了什么方法?

  • 我的答案
    双符号位
  • 标准答案
    双符号位判断法。当双符号位不一致表示溢出。

10.什么是溢出?什么是上溢?什么是下溢?

  • 我的答案
    不知道
  • 标准答案
    溢出即计算机无法表示数值。上溢是指数值绝对值大于表示范围,下溢是指计算机无法提供有效精度表示数值。

11.对于64位浮点型(double),一般都是采用最高位为符号位,次高11位为指数位,其次52位为尾数,试求出double型所能表达的最大值和最小值。

  • 我的答案
    不知道
  • 标准答案
    在这里插入图片描述

12.浮点数相比定点数,有什么优势?有什么不足的地方。

  • 我的答案
    浮点数比定点数表示范围更大,精度更大。浮点数运算复杂。
  • 标准答案
    浮点数可以表示更大的数据范围,但是运算耗时更长。

13.浮点数之间做加减法运算需要几个步骤?每个步骤都是必须的吗?为什么?

  • 我的答案
  • 标准答案
    浮点数加减法需要经过以下几个步骤:对阶、尾数求和、尾数规格化、舍入、溢出判断。对阶是为了使得尾数可以进行运算,阶码不一致尾数运算无效,尾数规格化、舍入是为了正确存储结果,溢出判断是为了判断运算过程是否有误,如果溢出将会发出信号进行溢出处理。

14.x=0.1101へ1001,y=0.1011へ110,请计算x+y的值,x-y的值。

15.x=0.1101へ111,y=-0.1111へ1101,请计算x+y的值,×-y的值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yemuxiaweiliang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值