初学者请教个关于隐式类型转换问题

wxh12369 2011-07-07 04:11:48
在学习隐式类型转换时我遇到编译器显示出来的结果和书中的不一样。。。。代码如下:
#include<stdio.h>
#define true 1
#define false 0

int main(void)
{
//Local Declarations
bool b = true;
char c = 'A';
float d = 245.3;
int i = 3650;
short s = 78;

//Statements
printf("bool + char is char: %c\n",b + c);
printf("int * short is int: %d\n",i * s);
printf("float * char is float: %f\n",d * c);

c = c + b;
d = d + c;
b = false;
b = -d; //float 在此时应该降级为 bool了呀

printf("\nAfter execution...\n");
printf("char + ture is char: %c\n",c);
printf("float + char is float: %f\n",d);
printf("bool = -float: %f\n",b);

return 0;
}//main
其中关于最后一句
编译器给出的结果是bool = -float:0.000000
而书中给出的结果是bool = -float:1


各位大虾看看是怎么回事。。。小弟看了半天也没搞懂。。
...全文
60 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hai040 2011-07-07
  • 打赏
  • 举报
回复
这个要去了解可变参数函数fn(x,...)的实现
估计书上写错了
至善者善之敌 2011-07-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wxh12369 的回复:]
谢谢1楼和2楼的两位了

我刚才试着将printf("bool = -float: %f\n",b);
中的%f改成了%d
结果编译器总算是给出了bool = -float:1
为什么会出现这样的结果呢???
[/Quote]

-311.29999 仍然是非0, 所以是1,即使你改成了%f改成了%d 他也已经是1了
wxh12369 2011-07-07
  • 打赏
  • 举报
回复
谢谢1楼和2楼的两位了

我刚才试着将printf("bool = -float: %f\n",b);
中的%f改成了%d
结果编译器总算是给出了bool = -float:1
为什么会出现这样的结果呢???
赵4老师 2011-07-07
  • 打赏
  • 举报
回复
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。

VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
ryfdizuo 2011-07-07
  • 打赏
  • 举报
回复
b = -d; //float 在此时应该降级为 bool了呀
0是false,非零就是true

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧