printf("%f\n",5)的输出结果为什么是0.000000

1,之所以没输出5,这是C语言设计的原因。
2,之所以输出0,这是计算机体系结构的问题。

具体来说:

printf函数不会进行任何类型转换,它只是从内存中读出你所提供的元素的值(按照%d,%f等控制字符提示的格式)。C语言设计中,int类型一般是32bit或者16bit,而float一般是64bit,并且有可能使用科学计数保存。这点就和huhugo88所说一样,5在内存中为00000000,00000101。而且5一般都在静态区,程序的静态存储区默认是0,那么当用%f来读时,就会读64bit,也就是会读之前的很多位0,最后按照(有效数字)×(基数2)pow(指数)的方式来取数,自然结果是0

之所以Vc中不允许这种情况,而有些编译器就允许这么输出就是编译器设置的问题。按理说,这样访问内存是属于越界访问,应该禁止。不过只是读,伤害性不大而已。
-----------
规范方法:
  1. 使用正确的格式 比如printf("%d\n", 5);

  2. 如果一定要用%f 那么让系统知道你的5是float型的。 具体的有两种方法

    1) printf("%f\n",5.0); 带上小数部分,就默认为浮点型了

    2) 强制类型转换 printf("%f", (float)5);



posted on 2016-07-10 19:34  谁陪你落日流年  阅读(769)  评论(0编辑  收藏  举报