关于浮点数和用%d输出float的问题

蜗牛科学会 2013-08-23 04:12:29
各位大神好,我尝试用两种方法强制编译器用整型指令来读取浮点值(其实就是想有一些比特值,是不是浮点数倒是无所谓),不知道结果为什么不一样
第一种,用%d来输出float,压入printf参数栈的肯定是float a的值,应该没有问题
第二种,强制指针类型转换,因为float和int都是4个字节,用int *指向float变量的地址,按理说也应该是合理的。
但是这两种方法输出的结果不一样,
第一种输出了0
第二种输出了1093567616
我猜测是强制指针类型转换出了问题,但是不明白其中的机理,拜求大神解释
或者手动用浮点数原理换算一下,看看到底那个值是错误的?


#include <stdio.h>
int main(){
float a = 1000000;
int *b = (int *)&a;
printf("%d\n%d", a, *b);
getchar();
}
...全文
1193 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
蜗牛科学会 2013-08-23
  • 打赏
  • 举报
回复
原来如此...这么简单...不知道就是不知道啊 稍加修改就实现了之前想看到的效果:

#include <stdio.h>
int main(){
    double a = 1000000;
    long long *b = (long long *)&a;
    printf("%lld\n%lld", a, *b);
    getchar();
}
为了和double的8个字节匹配,专门用了long long... 继续学习,感谢各位大神!
baihacker 2013-08-23
  • 打赏
  • 举报
回复

// 测试例子
#include <stdio.h>
int main(){
    double a = 1;
	float b = -1;
	printf("%f\n", a);
	printf("%f\n", b);
    getchar();
}
nice_cxf 2013-08-23
  • 打赏
  • 举报
回复
浮点数压栈时转成double了,
baihacker 2013-08-23
  • 打赏
  • 举报
回复
浮点数入栈后是double了.
前导课程:      《Java工程师系列课程》前4部课程内容:       本课程是《Java工程师系列课程》的第7部分,主要讲解Java实际开发过程中常用类,特别是各种工具类的使用。熟练掌握这些类的使用方法,能够大幅度提高编程效率。同时还在课程中穿插讲解了很多Java语言的设计思想和理念,深刻理解并掌握这些编程思想能够从根本上提高编程水平和解决问题的能力。在课程的末尾还安排了国际化软件实战项目。       本课程涉及的主要内容如下表所示:课程说明:      在开发Java程序的过程中,无论做什么类型的项目,都会用到各种工具类来解决一些实际问题。这些工具类被广泛的应用与各种行业软件的开发。比如我们经常会用BigDecimal类来的完成浮点数的精确计算,也会用Formatter类完成文本、数字、日期的格式化操作等等。      为了能够让学员迅速掌握这些工具类的使用,我们特意开发了这门视频课程,视频中详细讲解了20余种常用工具类的使用规则。此外,在课程中,还讲解了很多Java语言的设计思想和理念,可以让学员在听课过程中能够对Java语言有更加深刻的理解和认识。      最后,本课程还安排了一个小型国际化软件的实战项目,通过实战让学员掌握国际化软件的开发理念和实际操作流程预期效果:      认真学习完本课程,学员可以掌握20种Java实战开发中常用类的使用方法,实实在在提高实战水平,完成从菜鸟到高手的华丽转变。配套福利:中英文双语版本自助购物软件的完整源码环境配置要求:      学习本课程需安装JDK13或更高版本的JDK,以便程序能正确运行,建议使用IntelliJ IDEA 2019.1.2或更高版本的开发工具。     因有合作协议约束,《穆哥学堂》只提供PDF版本的课件!

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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