use*_*514 10 c printing floating-point double printf
我正在研究这个程序,我注意到使用%f表示double,%d表示float,这给了我一些完全不同的东西.谁知道为什么会这样?
int main ()
{
float a = 1F;
double b = 1;
printf("float =%d\ndouble= %f", a, b);
}
Run Code Online (Sandbox Code Playgroud)
这是输出
float = -1610612736
double = 190359837192766135921612671364749893774625551025007120912096639276776057269784974988808792093423962875123204096.0000
Run Code Online (Sandbox Code Playgroud)
%d代表十进制,它需要一个类型的参数int(或一些较小的有符号整数类型,然后被提升)。浮点类型float和double两者都以相同的方式传递(提升为double)并且它们都使用%f. 在 C99 中,您也可以使用%lf来表示 的较大尺寸double,但这纯粹是装饰性的(注意,scanf没有发生提升,这实际上有所不同)。
由于变量参数的工作方式,C除了%dand 之外,不知道您实际传递的值的类型%f。当您传递变量参数时,您基本上是在做,(void*)&myvalue因为编译器和运行时的函数都无法确定变量的类型,除了格式化字符串中给出的以外。因此,即使有隐式转换可用,编译器也不知道需要它。
好吧,在大多数系统上,double是8个字节,而float是4个字节。因此,这两种类型不是二进制兼容的。这就像试图将字符串解释为双精度或其他不兼容类型一样。
| 归档时间: |
|
| 查看次数: |
72948 次 |
| 最近记录: |