objective-c - 有人可以向我解释 %f 和 %d 的目的吗?

标签 objective-c c

#include <stdio.h>

 int main(int argc, const char * argv[])
 {

    float apples = 1.1;

    float bananas = 2.2;

    double fruit = apples + bananas;

    printf("%f.\n",fruit);

    return 0;

 }

好吧....那么为什么这里需要 %f 呢?我知道它正在为我打印“水果”的十进制符号,但为什么我不能只要求程序打印数字“水果”?是因为我必须声明我是否要以十进制 %f 或科学计数法 %e 打印“水果”?我也偶尔遇到过 %d。这意味着什么?

最佳答案

好吧,如果你看一下 definition of the printf function , 然后你会知道这些值传递为 %d : int 格式说明符 %f : 浮点格式说明符

被称为格式说明符

printf也是库中定义的一个简单方法 并根据参数打印值

例如

int a = 5;
float b = 5.43 ;

现在如果你写

printf("%d",a);

它打印存储在变量 a ==>> 中的整数值 5

printf("%f",b);

它打印存储在变量 b ==>> 中的浮点值 5.430000//最多六位数

如果你尝试使用代码

printf("%f",a);
printf("%d",b);

这两行都打印了一个尴尬的值,称为垃圾值,从未知位置获取,因为您使用了错误的格式说明符

可以引用link

1 : http://www.elook.org/programming/c/printf.html获取格式说明符列表

Alok 保存:

看到这有点复杂,如果我不能清楚地解释,请告诉我,我会尝试创建一个具有更好答案的差异问题。

实际发生的是 当你写的时候

int a = 5 // 101 in binary

然后在内存中分配 2 个字节 = 16 位,如


0000000000000101

但是当您尝试通过将 %f 作为格式说明符将其打印为 float 时 它要求一个 4 字节 = 32 位的表达式 但你得到的是 16 位表示 和最重要的一点 float 的第 16 位保留给“.”那是小数 所以你的


0000000000000101 成为


  1. = 二进制 10//十进制 2

因此小数点前的值变为 2 而不是 5 并且由于 float 仍然有 16 位表示小数点后的值 并且 int 变量仅提供 16 位来表示十进制前的值 因此,表示十进制后值的最后 16 位选择垃圾值 这些垃圾值代表一些随机二进制值 最终产生一些值(value)

所以你的输出将永远是 2.something

这个 something 部分对于每台机器来说都是不同的,因为它会选择垃圾值 但按照给定的解释,小数点前的值将始终相同

希望有用

但如果它不让我知道

我会尝试想出一个更好的表示方式

还有 link会有很大帮助

关于objective-c - 有人可以向我解释 %f 和 %d 的目的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14482409/

相关文章:

ios - 在iphone mkmapview中获取触摸 map 的当前位置

ios - iPhone私有(private)API编译

c - C 中严格从左到右求值

c++ - C中整数到字符的转换

我可以同时执行两个功能吗?

c - C 中的空参数

iphone - 为 Xcode 4 创建/使用 Singleton NSMutableArray 的正确方法

ios - 在所选区域中从 uiimagepickerviewcontroller 裁剪图像

ios - 如何在iOS中共享图像,消息和URL(Objective-C)

c - zlib Z_DATA_ERROR "invalid code lengths set"