#include<stdio.h>
void main()
{
double x=1,y=2,c;
c=1.0+x/y;
printf("%d\n",c);
}
cçå¼ä¸º1.5ï¼å¦æ对åº%fè¾åºï¼åè¾åº1.5ï¼å¯¹åº%dè¾åºï¼åææ´åæ°è¾åºã
ä½cæ¯ææµ®ç¹ååå¨çï¼å³1.5 = 0.75 * 2ï¼åå¨æ¶ï¼åªåå¨å°¾ç 0.75(äºè¿å¶ä¸º0.11)åé¶ç 1(äºè¿å¶ä¸º1)å³å¯ï¼å 8个åèï¼æintåè¾åºæ¶ï¼åªåå4个åèã
doubleæµ®ç¹æ°å 8åèï¼64ä½ï¼intæ°å 4åèï¼32ä½ã
doubleæµ®ç¹æ°ä»é«å°ä½ä½åå«åå¨ç¬¦å·ä½(1ä½)ãææ°é¨å(11ä½)åå°æ°é¨å(52ä½)
1.5çæµ®ç¹åå¨æ ¼å¼ä¸ºï¼
0 000 0000 0001 011(åé¢49个0)
符å·ä½(0表示æ£æ°) ææ°é¨å(1) å°æ°é¨å(0.75)
ææ´åæ°è¾åºæ¶ï¼åä½32ä½(å ¨0)ï¼
å³è¾åº0ã
ä½cæ¯ææµ®ç¹ååå¨çï¼å³1.5 = 0.75 * 2ï¼åå¨æ¶ï¼åªåå¨å°¾ç 0.75(äºè¿å¶ä¸º0.11)åé¶ç 1(äºè¿å¶ä¸º1)å³å¯ï¼å 8个åèï¼æintåè¾åºæ¶ï¼åªåå4个åèã
doubleæµ®ç¹æ°å 8åèï¼64ä½ï¼intæ°å 4åèï¼32ä½ã
doubleæµ®ç¹æ°ä»é«å°ä½ä½åå«åå¨ç¬¦å·ä½(1ä½)ãææ°é¨å(11ä½)åå°æ°é¨å(52ä½)
1.5çæµ®ç¹åå¨æ ¼å¼ä¸ºï¼
0 000 0000 0001 011(åé¢49个0)
符å·ä½(0表示æ£æ°) ææ°é¨å(1) å°æ°é¨å(0.75)
ææ´åæ°è¾åºæ¶ï¼åä½32ä½(å ¨0)ï¼
å³è¾åº0ã
温馨提示:答案为网友推荐,仅供参考
第1个回答 2011-03-26
#include<stdio.h>
void main()
{
double x=1,y=2,c;
c=1.0+x/y;
printf("%G\n",c); // printf("%lf\n",c); /*这两种都可以输出正确结果*/
}
/* 因为double的精度比int 高,在进行类型转化的时候(因为你用%d输出即int类型)所以就丢失了精度,因此在计算过程中要避免把高精度的值转化为低精度的*/
void main()
{
double x=1,y=2,c;
c=1.0+x/y;
printf("%G\n",c); // printf("%lf\n",c); /*这两种都可以输出正确结果*/
}
/* 因为double的精度比int 高,在进行类型转化的时候(因为你用%d输出即int类型)所以就丢失了精度,因此在计算过程中要避免把高精度的值转化为低精度的*/
第2个回答 2011-03-26
在上面的程序输入的时候,定义double x=1,y=2时这是整型常量,在下面c=1.0+x/y时你输入的是一个实数(1.0),加上两个整型常数相除,这是程序定义的错误,把上面的x=1,y=2改成x=1.0,y=2.0(实数)就可以了,还有最下面的%d是输出的整数,只有小数点前的结果,改成%f(输出单双精度,隐含6位小数点)就会显示出小数点以后的结果,就是全部答案
第3个回答 2011-03-26
因为双精度的数据的分配空间是8个字节,以补码的形式进行运算,而整型量的分配空间只有两个字节。在c被赋值double型的1.50000000,它在内存中的存储形式是64位,printf函数在输出整型格式的时候是截取前八位,忽略后面,最后输出为0;
第4个回答 2011-03-26
x/y = 0 , 1.0+x/y = 1.0
再将1.0+x/y赋给c, c = 1.0
在printf函数中,格式%d需要int类型,但c的类型是double,在编译时会出现警告,结果为0
今后注意点就行了!
再将1.0+x/y赋给c, c = 1.0
在printf函数中,格式%d需要int类型,但c的类型是double,在编译时会出现警告,结果为0
今后注意点就行了!
第5个回答 2011-03-27
看到楼上的答案!我恍然大悟啊!