转载

单精度浮点数在计算机中的表示方法

首先,这是一个小白文 最近在看《程序是怎么跑起来的》里面有一段代码

如下 因为编译器的原因,所以代码跟书上有些不同,不要介意 代码在书上52页

#include<stdio.h> #include<string.h> int main() {  float data;  unsigned long buff;  int i;  char s[34];  //将0.75以单精度浮点数的形式存储在变量date中。  data = (float) 0.75;  //把数据复制到4字节唱的的整数变量buff中以诸葛提取出每一位。   memcpy(&buff,&data,4) ;  //逐一提取出每一位  for(i=33;i>=0;i--)   {   if(i==1||i==10)   {      s[i]='-';   }   else   {     //为各个字节赋值'0'或者'1'。     if(buff%2==0)    {     s[i]='0';    }    else    {     s[i]='1';    }   }   buff/=2;  }  s[34]='/0';  //显示结果。  printf("%s/n",s) ;  return 0; }  

这段代码工作正常,如下

单精度浮点数在计算机中的表示方法

然后我把其中为各个字节赋值那几行改成了这样

s[i] = buff % 2; 

人后程序就不能正常输出了

分析后发现程序输出字符穿的时候遇到0自动终止,于是我有把程序改成了这样

s[i] = buff % 2 + 48;//把数字转成ascii码。 

程序可以正常工作了

正文到此结束
Loading...