c或c++中int转float中在printf中的问题
来源:互联网 发布:数据流程图画法 编辑:程序博客网 时间:2024/04/28 15:42
先看下面代码:
int main()
{
int a = 200;
printf("%lf", a);
}
刚看到这个结果的时候蒙了,难道不应该是200.000000吗?
然后查了下float的存储结构:float在计算机中存储分符号位部分,指数位部分,位数位部分;0-22位存储尾数位,23-30位存储指数位,31位符号位。注意指数位的基数是127,实际的指数大小,需要将30-23位的数值减去127。
上述程序中a在内存中存储为:0000 0000 0000 0000 0000 0000 1100 1000。因为在C语言中没有重载函数这么一说,那么在printf("%lf", a)这个语句中就直接把a在内存中的表现形式作为float的表现形式。那好,0000 0000 0000 0000 0000 0000 1100 1000 符号位为0,表示正数;指数位为0-127=-127;位数部分为1.000 0000 0000 0000 1100 1000
那么就是float的表现形式就是 1.000 0000 0000 0000 1100 1000 * 2^(-127);
表示1.000 0000 0000 0000 1100 1000 这个二进制数要向左移动127位!!这是一个极端,为了说明问题,我们再看一下另外的一个极端
假设上述的 a = 2000000000(20亿),二进制表示方法为:0111 0111 0011 0101 1001 0100 0000 0000 ,这个指数应该是2^(238-127)=2^111表示要把1.011 0101 1001 0100 0000 0000 这个二进制数向右移动111位。
以上说明是准确的,下面开始我的胡言乱语,,,,,,
于是我猜测编译器为了解决上述极端问题规定,无论什么整数直接打印为float或是double时,都显示为0。
printf在执行时不会进行类型转换。
于是再执行下面代码:
现在运行正确了;在这个程序内,float b = a这个语句实际上就进行时隐式类型转换,这个语句的执行不会像printf里面那样直接把a内存中的32位数解释为float,重新把200转换成float在内存中以上述方式存储,于是就看见了上述显示的结果。
那么反方向呢?
现在这个应该很好理解了:200以float在内存中存储为:0100 0011 0100 1000 0000 0000 0000 0000 。那么printf时候直接解析该内存值为int类型的值,
这样输出的数是一个非常大的值,于是(以下猜测,我只能这么理解......)和上面一样,编译器遇到了这样的转换,就直接输出0
- c或c++中int转float中在printf中的问题
- C语言中printf用%d输出float类型数据,或以%f输出int型数据的结果
- C语言中printf用%d输出float类型数据,或以%f输出int型数据的结果
- 转:C语言中的printf用%d输出float类型数据出现或以%f输出int型数据的结果为什么是0
- C语言中的printf用%d输出float类型数据出现或以%f输出int型数据的结果为什么是0
- C语言中的printf用%d输出float类型数据出现或以%f输出int型数据的结果为什么是0
- c printf 函数的一些误区 以及 int, float 在内存中的存储方式
- c语言中int与float数据运算时,数据转换问题
- C/C++中int/long/float/double数值转换
- C 中int float。。。double类型 占位符
- C语言中int到float的强制类型转换
- C语言中int到float的强制类型转换
- C语言中强制转换float为int
- c语言中int到float的缺失问题解决
- 在llvm-IR中调用printf函数输出int、float变量
- c中printf的输出问题
- C语言中printf参数问题
- C++、C中有关double、float类型转换成int型,及取整,丢失精度问题。
- [Python标准库]re——正则表达式[六]
- Gunnar Farnebak的算法计算稠密光流
- 18-1
- eclipse#1
- 从农夫砍大白菜到解决约瑟夫环的问题!
- c或c++中int转float中在printf中的问题
- 借此博客发布敲代码过程中遇到的问题。
- HDU 1078 FatMouse and Cheese 记忆化搜索
- jquery 数值比较大小时注意事项
- BZOJ-1087 互不侵犯King 状压DP+DFS预处理
- [Servlet&JSP] 从JSP到Servlet
- 最全Pycharm教程(29)——再探IDE,速成手册
- URI/URL/URN
- 同行div设置其内元素不同位置