大家好,今天我又写了一道计算机组原习题,是这样子的。
题目和题解都来自与 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版权协议,转载请附上原文出处链接和本声明。