计算机组成原理_01_浮点数转换_代码实现_测试用例

1. 实验要求

在Transformer类中实现以下6个方法

  1. 将整数真值(十进制表示)转化成补码表示的二进制,默认长度32位
 public String intToBinary(String numStr) 
  1. 将补码表示的二进制转化成整数真值(十进制表示)
 public String binaryToInt(String binStr)
  1. 将十进制整数的真值转化成NBCD表示(符号位用4位表示)
public String decimalToNBCD(String decimal)
  1. 将NBCD表示(符号位用4位表示)转化成十进制整数的真值
public String NBCDToDecimal(String NBCDStr)
  1. 将浮点数真值转化成32位单精度浮点数表示

    • 负数以"-"开头,正数不需要正号

    • 考虑正负无穷的溢出(“+Inf”, “-Inf”,见测试用例格式)

public String floatToBinary(String floatStr)
  1. 将32位单精度浮点数表示转化成浮点数真值
    • 特殊情况同上
public String binaryToFloat(String binStr)

2. 实验攻略

本次实验推荐使用的库函数有

Integer.parseInt(String s)
Float.parseFloat(String s)
String.valueOf(int i)
String.valueOf(float f)

本次实验不允许使用的库函数有

Integer.toBinaryString(int i)
Float.floatToIntBits(float value)
Float.intBitsToFloat(int bits)

3.具体实现

3.1 整数转二进制补码

  1. 判断正负,如果为正数,则补码以0 开始,如果为负数,则补码以1 开始
  2. 常规思路:统一转化为正数,转换为补码,再根据正负,判断是否需要进行取反加1的操作。
  3. 其他思路:可以利用模系统互相等价的原理
    例如:如果我要求-3的补码,我先求 -3 + 8 = 5 的补码,最后改变符号位即可。因此,代码如下
3.1.1代码实现
public static String intToBinary(String numStr) {
   
   
        int value = Integer.parseInt(numStr);
        char[] ans = new char[32];
        Arrays.fill(ans,'0');
    	bool isNeg = false;
        if(value < 0){
   
   
            value += Math.pow(2, 31);
            isNeg = true;
        }
        int index = 31;
        while (value > 0){
   
   
            if(value % 2 == 1){
   
   
                ans[index] = '1';
            }
            index--;
            value /= 2;
        }
    	if(isNeg)
        {
   
   
            ans[0]  = '1' ;  
        }   
		return new String(ans);
    }
3.1.2 测试用例
    @Test
    public void intToBinaryTest1() {
   
   
        assertEquals("00000000000000000000000000000010", Transformer.intToBinary("2"));
    }

    @Test
    public void intToBinaryTest2() {
   
   
        assertEquals("10000000000000000000000000000000", Transformer.intToBinary("-2147483648"));
    }

    @Test
    public void intToBinaryTest3() {
   
   
        assertEquals("00000000000000000000000000001001", Transformer.intToBinary("9"));
    }

    @Test
    public void intToBinaryTest4() {
   
   
        assertEquals("00000000000000000000000000101001", Transformer.intToBinary("41"));
    }

    @Test
    public void intToBinaryTest5() {
   
   
        assertEquals("11111111111111111111111111111111", Transformer.intToBinary("-1"))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值