首先,这是一个小白文 最近在看《程序是怎么跑起来的》里面有一段代码
如下 因为编译器的原因,所以代码跟书上有些不同,不要介意 代码在书上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码。
程序可以正常工作了