【C++求解组原习题】Float型数据,IEEE754 单精度浮点数表示,32位

大家好,今天我又写了一道计算机组原习题,是这样子的。

题目和题解都来自与 https://www.nowcoder.com/questionTerminal/3676093580344964af739b9e33a5463b

float 型数据通常用 IEEE754 单精度浮点数格式表示。若编译器将 float 型变量 x 分配在一个 32 位浮点寄存器 FR1 中,且 x=-8.25,则 FR1 的内容是( )。

A. C104 0000H        B. C242 0000H       C. C184 0000H      D. C1C2 0000H

下面是题解 (jpg)

根据思路写出代码

#include<iostream>
using namespace std;
char tostring[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
string  xtor(int i,int r)
{	//i是要转化的十进制数,r是目标进制 
	string a;
	while(i) a=tostring[i%r]+a,i/=r; 	
	return a;
}

char B2H(string s)
{ //将二进制转化为十六进制
	while(s.length()<32)  s+='0';
	int i =0;
	string temp="";
	while(i<32)
	{	
		if(i<s.length())  temp+=s[i++];
		if(i%4==0) 
		{
			int res = 0;
			if(temp[0]=='1') res+=8;
			if (temp[1]=='1') res+=4;
			if (temp[2]=='1') res+=2;
			if (temp[3]=='1') res+=1;
			cout<<tostring[res];
			temp="";
		}		
	}	
}
int main()
{
	double i;
	string res;
	while(cin>>i)
	{
		int r=2,n,f=0;
		double dec;
		string a,b;
	
		if(i<0) f=1,i=-i; //符号位 
		n=int(i),dec=i-n; //分解成整数和小数 		
		while(n) a=tostring[n%r]+a,n/=r;//整数部分转成二进制 
		while(dec) dec=dec*r,b=b+tostring[int(dec)],dec=dec-int(dec);//小数部分转成二进制 		
		
		//结果=符号位+阶码(偏置值:127)+尾数(整数的后半部分和小数部分) 
		res=tostring[f]+xtor(a.length()+126,2)+a.substr(1)+b;
		cout<<res<<endl;//直接输出01组成的结果,下面是将其转化成十六进制显示 
		B2H(res);//写的不好,嫌麻烦可以不看 
	}
 } 

运行结果如下 ,所以选A

 

代码还可以精简优化,我就当抛砖引玉了。

下面是我的另外的博文,感兴趣可以看一看。   C++ 求解 汉明码校验


版权声明:本文为kin55原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。