【C++求解组原习题】Float型数据,IEEE754单精度浮点数表
⽰,32位
⼤家好,今天我⼜写了⼀道计算机组原习题,是这样⼦的。
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);//⼩数部分转成⼆进制
浮点型变量float//结果=符号位+阶码(偏置值:127)+尾数(整数的后半部分和⼩数部分)
res=tostring[f]+xtor(a.length()+126,2)+a.substr(1)+b;
cout<<res<<endl;//直接输出01组成的结果,下⾯是将其转化成⼗六进制显⽰
B2H(res);//写的不好,嫌⿇烦可以不看
}
}
运⾏结果如下 ,所以选A
代码还可以精简优化,我就当抛砖引⽟了。
下⾯是我的另外的博⽂,感兴趣可以看⼀看。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论