📄 qmn.cpp
字号:
/*dsp浮点数转化为定点数的算法*/
/*格式是Qm.n,或叫做Sn.m*/
#include <math.h>
#include <stdio.h>
#define M 3 /*m.n中m的大小,表示符号位*/
#define N 12 /*m.n中的n大小,需乘以该指数2的次方*/
#define Type 0 /*正数为0,负数为1*/
#define L (M+N+1)/4 /*最后十六进制位数*/
int main ()
{
float a; /*需要变换的数*/
int result[N+M],i,j; /*result存储二进制结果*/
int x; /*整数结果*/
int coffi[N+M]; /*以2为底的阶数*/
int sixresult[N+M+1]; /*16位二进制结果*/
int sixteen[L]; /*最后的十六进制结果*/
char sixteenc[L]; /*符号化最后结果*/
double b;
printf("输入您想转化的浮点数:");
scanf("%f",&a);
b=a*pow(2,N); /*化为整数*/
printf("%2f\n",b);
x=(int)b; /*取整*/
printf("\n得到整数结果为:%d\n",x);
for(i=0;i<M+N;i++) /*求阶数*/
{
result[i]=0;
coffi[i]=(int)pow(2,i);
printf("%d ",coffi[i]);
}
for(i=0;i<M+N;i++) /*求m+n位二进制结果*/
{
if((x-coffi[M+N-i-1])>=0)
{
result[i]=1;
x=x-coffi[M+N-i-1];
}
else
result[i]=0;
}
printf("\n除符号位外的二进制结果:");
for(i=0;i<M+N;i++)
printf("%d",result[i]);
for(i=0;i<M+N+1;i++) /*将符号位考虑进结果*/
{
if(i==0)
sixresult[i]=Type;
else
sixresult[i]=result[i-1];
}
printf("\n考虑符号位结果:");
for(i=0;i<M+N+1;i++)
printf("%d ",sixresult[i]);
for(i=0;i<L;i++) /*求得十六进制结果*/
{
sixteen[i]=0;
for(j=0;j<(M+N+1)/4;j++)
{
sixteen[i]+=sixresult[i*4+j]*(int)pow(2,(3-j));
}
}
printf("\n十六进制结果,未化成符号形式");
for(i=0;i<L;i++)
printf("%d ",sixteen[i]);
for(i=0;i<L;i++) /*符号化结果*/
{
if(sixteen[i]<=9)
sixteenc[i]=sixteen[i]+48;
else
switch(sixteen[i])
{
case 10: sixteenc[i]='a'; break;
case 11: sixteenc[i]='b'; break;
case 12: sixteenc[i]='c'; break;
case 13: sixteenc[i]='d'; break;
case 14: sixteenc[i]='e'; break;
case 15: sixteenc[i]='f'; break;
default:printf("Wrong!");
}
}
printf("\n符号化之后:");
for(i=0;i<L;i++)
printf("%c ",sixteenc[i]);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -