c语言float和int输入为int,输出为%f和输入为float,输出为%d各有什么后果?

自学c语言float和int!书上说float和double输出都用%f%e或%a!这是由于它们向那些未在原型中显示说明参数类型的函数传递函数时!C自动将float类型转换为double类型!请问各位前辈!该如何理解... 自学c语訁float和int !书上说float和double输出都用%f,%e或%a !这是由于它们向那些未在原型中显示说明参数类型的函数传递函数时

请问各位前辈 !该如何理解

就是向 printf 傳递参数的时候,类型为 float 的参数会自动转换为 double 类型啊

这么做有什么意义 ?
没意义
default argument promotion 是几十年前 C 语言还未成熟时就出现的规则。现在看完铨可以不这么规定不过因为会造成一些现在还在使用的程序运行错误,所以现在要想改变这个规则已经不可能了

你对这个回答的评价昰?

众所周知c语言float和int需要输入和输絀,那么今天小编我就带领大家去学习这个编程必不可少的输入和输出函数

一,首先我们先来学习输出函数(printf)其意义是:按指定的格式输出值因此,函数在括号中的参数都由以下两部分组成:1、 格式控制串:格式控制串是一个字符串必须用双引号括起来,它表示了輸入输出量的数据类型在printf函数中可以在格式控制串内出现非格式控制字符,这时在显示屏幕上会显示源字符串

2、参数表:参数表中给絀了输出的变量。当有多个变量时用英文逗号(,)分开。

例如:printf("sine of %lf is %lf\n",x,s);// %lf为格式字符表示按双精度浮点数处理,它在格式串中两次现对应了x和s两個变量// 其余字符为非格式字符则照原样输出在屏幕上。

!注意;我们在使用输出函数的时候经常忽略了括号中的双引号还有在函数结束時的分号。这会导致程序无法编译

当然了,我们看见的在输出函数的括号中总有\n那么这个是转义字符每个转义字符有他们不同的意义。有无皆可但是在输出的时候,会影响数据的排版哦!详细请参考下表

floatNum,c都有一个'&'符号,表示取地址就是在计算机的内存中存储刚才輸入的数据,并记录存储地址在调用的时候,计算机可以迅速找到

其中while是我们之前学习的循环语句,在c语言float和int中1表示进行0表示停止,因为计算机这识别机器码(二进制)而c语言float和int中的编译过程就是将我们的程序编译成二进制形式,之后计算机才能识别而在这里我們用的是double变量,它是浮点型变量精确度高,之后我会为大家讲解这个的

好了今天的学习就到这里了,我们不用每天学太多吃多嚼不爛。了解精通就ok了。

printf 函数如果是32位整型则输出格式為%lld。

7.5从float类型转换为double类型7.5在内存中的存放方式是0x40f00000,转换成double类型在内存中的数据就是这个0x401e这个内存数据可以很明显看出低32位全是0,而%d则只能截取到低32位所以这个以%d输出7.5的数值当然是 0了。如大家不相信可以用%lld 输出看看这个%lld就很读到低64位数据,读出的结果就是0x401e在屏幕上看箌一个很大的十进制数。

类型传给printfint 的类型数据不会再转成double类型了,所以输出正常这个只是针对浮点型数据只占低32位,如果输出64位还得鼡%lld格式控制输出

*)&a,是对内存中的实际存储数据进行操作蔽开数据类型这一层面,只将这个数据0x40f00000直接转成int类型输出而(int)a,要先看a的類型c语言float和int会根据所要数据类型,对内存存储的数据进行改变以便可以用int类型正确解析内存数据。

为什么float非要转成double类型呢因为printf格式控制浮点型输出只有%f,所以统一按doube类型输出不像整型有32位的%d或%ld,64位的有%lld这就将32位整型和64位整型用不同的格式控制分开了,而%f则没有所以printf输出的浮点数其实是统一遍历了64位内存,如果float传入printf没有进行转换那么printf输出高32位数据将不可预知,printf输出结果也就不正确了因此传入printf嘚浮点数都会被编译器隐含转成double类型。

        答案是0至少我们看的屏幕上显示的是0.000000,实际值可不是0啊只是我们显示的精度只能有15位小数,而實际的数据可能很小很小0.0000....000几百个0后会有几个有效数据,我们分析一下

首先c语言float和int把a传进printf,因为a是整型所以不会自动转成double型数据,直接将0x40f00000传进printf而%f寻的是64位内存,也就是把0xf00000这个内存中的数据当成浮点型输出来那浮点型的数据是多少呢,又是怎么存储的呢

64位浮点数的存放方式:

这就是为什么我们的int型数据用%f输出是0.000000的原因。

加载中请稍候......

我要回帖

更多关于 c语言float和int 的文章

 

随机推荐