关于C语言格式输出和数据类型。求大神解释下图现象。
1个回答
展开全部
int c = a / b, 在 C 语言中,整数的除法是取整,所以 5 / 2 = 2;
float d = a / b, 意义一样,将计算出的 2 的值赋给一个 double 型变量,其结果仍然是 2, 只不过在内存中表现为 float 型;
double e = a / b, 同样,e 是一个双精度浮点型,结果为 2;
重点在显示上,格式控制输出时,后面的参数必须和格式控制相符。
正确的输出方式为:printf("%d %f %lf\n", c, d, e);
扩展:printf 遇到格式控制时,会从栈中取出对应的内存,并强制解析为格式控制所指示的类型。
比如:遇到第一个 %f, 它会取出第一个参数的地址,向后取 sizeof(float) 的内容,并以 float 形式取出。我们知道,int 型和 float 型的变量虽然占用的内存均为 4 字节,但它们的内存表示方法不相同。在小端模式下,int 型会以低位先存的方式保存在内存中,而 float 存储时会按符号、指数以及尾数进行存储(具体的表示方法可以百度之),所以 int 型的数据以 %f 显示,或者 float 型的数据以 %d 显示,结果都是不正确的,其他的类型类同。
float d = a / b, 意义一样,将计算出的 2 的值赋给一个 double 型变量,其结果仍然是 2, 只不过在内存中表现为 float 型;
double e = a / b, 同样,e 是一个双精度浮点型,结果为 2;
重点在显示上,格式控制输出时,后面的参数必须和格式控制相符。
正确的输出方式为:printf("%d %f %lf\n", c, d, e);
扩展:printf 遇到格式控制时,会从栈中取出对应的内存,并强制解析为格式控制所指示的类型。
比如:遇到第一个 %f, 它会取出第一个参数的地址,向后取 sizeof(float) 的内容,并以 float 形式取出。我们知道,int 型和 float 型的变量虽然占用的内存均为 4 字节,但它们的内存表示方法不相同。在小端模式下,int 型会以低位先存的方式保存在内存中,而 float 存储时会按符号、指数以及尾数进行存储(具体的表示方法可以百度之),所以 int 型的数据以 %f 显示,或者 float 型的数据以 %d 显示,结果都是不正确的,其他的类型类同。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询