社区
C语言
帖子详情
为什么输出不同?
fthislife
2009-12-26 10:24:58
下边的程序什么输出的是9.000000 0.000000而不是9.000000 9.000000?
为什么会有差别?是什么原因引起的?
#include<stdio.h>
void main()
{
int c=9;
float a,*p;
a=(float)c;
p=(float*)(&c);
printf("%f %f\n",a,*p);
}
...全文
145
17
打赏
收藏
为什么输出不同?
下边的程序什么输出的是9.000000 0.000000而不是9.000000 9.000000? 为什么会有差别?是什么原因引起的? #include void main() { int c=9; float a,*p; a=(float)c; p=(float*)(&c); printf("%f %f\n",a,*p); }
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wj198895
2009-12-26
打赏
举报
回复
p=(float*)(&c);
地址是一个整型的值
不能将其转化成其它类型
selooloo
2009-12-26
打赏
举报
回复
[Quote=引用 15 楼 fthislife 的回复:]
指数位为什么是-127?
怎样算出来的?
[/Quote]
去查下float存储,或者看看5L,float类型指数的起始数为127(二进制0111 1111)
十进制换成2进制,指数位要加127,反过来,二进制换成10进制指数为减127
这里的指数位是0,0-127,指数位就是-127了
hujiao199
2009-12-26
打赏
举报
回复
[Quote=引用 2 楼 hlyces 的回复:]
引用楼主 fthislife 的回复:
下边的程序什么输出的是9.000000 0.000000而不是9.000000 9.000000?
为什么会有差别?是什么原因引起的?
#include <stdio.h>
void main()
{
int c=9;
float a,*p;
a=(float)c;
p=(float*)(&c);
printf("%f %f\n",a,*p);
}
===========================
你自己不是知道了么。p=(float *)(&(float)c)
[/Quote]
p=(float *)(&(float)c)
这么写错误的。
flyyyri
2009-12-26
打赏
举报
回复
存取的差异
fthislife
2009-12-26
打赏
举报
回复
[Quote=引用 5 楼 wuyu637 的回复:]
C/C++的浮点数据类型有float和double两种。
类型float大小为4字节,即32位,内存中的存储方式如下:
符号位(1 bit)
指数(8 bit)
尾数(23 bit)
类型double大小为8字节,即64位,内存布局如下:
符号位(1 bit)
指数(11 bit)
尾数(52 bit)
符号位决定浮点数的正负,0正1负。
指数和尾数均从浮点数的二进制科学计数形式中获取。
如,十进制浮点数2.5的二进制形式为10.1,转换为科学计数法形式为(1.01)*(10^1),由此可知指数为1,尾数(即科学计数法的小数部分)为01。
根据浮点数的存储标准(IEEE制定),float类型指数的起始数为127(二进制0111 1111),double类型指数的起始数为1023(二进制011 1111 1111),在此基础上加指数,得到的就是内存中指数的表示形式。尾数则直接填入,如果空间多余则以0补齐,如果空间不够则0舍1入。所以float和double类型分别表示的2.5如下(二进制):
符号位
指数
尾数
0
1000 0000
010 0000 0000 0000 0000 0000
0
100 0000 0000
0100 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000
浮点数2.5可以用二进制小数准确表示(2.5=1*(2^1)+0*(2^0)+1*(2^-1)),但很多小数不可以准确表示
文章出处:DIY部落(http://www.diybl.com/course/3_program/c++/cppsl/2008629/129103.html)
[/Quote]
谢谢楼上的讲解,我也知道浮点型在内存的储存方式,但是不知道
a=(float)c; 这句的转换过程是怎样的?
p=(float*)(&c); 还有这句,是不是系统读取指针所指的内容,是安照指针的类型读取而不是安照指针所指的类型读取,是吗?
z569362161
2009-12-26
打赏
举报
回复
整数和浮点数存储的差异.
wuyu637
2009-12-26
打赏
举报
回复
C/C++的浮点数据类型有float和double两种。
类型float大小为4字节,即32位,内存中的存储方式如下:
符号位(1 bit)
指数(8 bit)
尾数(23 bit)
类型double大小为8字节,即64位,内存布局如下:
符号位(1 bit)
指数(11 bit)
尾数(52 bit)
符号位决定浮点数的正负,0正1负。
指数和尾数均从浮点数的二进制科学计数形式中获取。
如,十进制浮点数2.5的二进制形式为10.1,转换为科学计数法形式为(1.01)*(10^1),由此可知指数为1,尾数(即科学计数法的小数部分)为01。
根据浮点数的存储标准(IEEE制定),float类型指数的起始数为127(二进制0111 1111),double类型指数的起始数为1023(二进制011 1111 1111),在此基础上加指数,得到的就是内存中指数的表示形式。尾数则直接填入,如果空间多余则以0补齐,如果空间不够则0舍1入。所以float和double类型分别表示的2.5如下(二进制):
符号位
指数
尾数
0
1000 0000
010 0000 0000 0000 0000 0000
0
100 0000 0000
0100 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000
浮点数2.5可以用二进制小数准确表示(2.5=1*(2^1)+0*(2^0)+1*(2^-1)),但很多小数不可以准确表示
文章出处:DIY部落(http://www.diybl.com/course/3_program/c++/cppsl/2008629/129103.html)
huang_gen
2009-12-26
打赏
举报
回复
同意楼上的说法:
确实在内存中,int float的存储形式不同,int采取的事补码形式,float采取的是“指数形式”,如果你感兴趣,可以把float的内存信息用十六进制的形式输出进行研究,当把指数形式的二进制位信息按照int的补码进行解析的时候,往往结果不是我们期待的!
fthislife
2009-12-26
打赏
举报
回复
[Quote=引用 1 楼 stardust20 的回复:]
flaot和int在内存中的存取方式不同(具体没研究过)。。。然后你以float的形式去取int型的数据,和以float的形式去取float型的数据,虽然可能要取的数据大小相等,但是它们的存储方式不同,所以结果不同
[/Quote]
哪int强制转成float时的详细过程是怎样的?在内存中是进行怎样的运算的?
hlyces
2009-12-26
打赏
举报
回复
[Quote=引用楼主 fthislife 的回复:]
下边的程序什么输出的是9.000000 0.000000而不是9.000000 9.000000?
为什么会有差别?是什么原因引起的?
#include <stdio.h>
void main()
{
int c=9;
float a,*p;
a=(float)c;
p=(float*)(&c);
printf("%f %f\n",a,*p);
}
[/Quote]
===========================
你自己不是知道了么。p=(float *)(&(float)c)
stardust20
2009-12-26
打赏
举报
回复
flaot和int在内存中的存取方式不同(具体没研究过)。。。然后你以float的形式去取int型的数据,和以float的形式去取float型的数据,虽然可能要取的数据大小相等,但是它们的存储方式不同,所以结果不同
东大坡居士
2009-12-26
打赏
举报
回复
学习~~
fthislife
2009-12-26
打赏
举报
回复
[Quote=引用 11 楼 selooloo 的回复:]
a=(float)c; 是值转换,和计算机的自动类型转换一样的,也就是和a=c; 效果一样,这时计算机帮你完成转换
p=(float*)(&c);是将c的内存形式解释为浮点型,c的值是9,在内存中为 0x0009,二进制为
00000000 00000000 00000000 00001001
将其解释为浮点数就为
0 00000000 0000000 00000000 00001001
符号位 是0
指数 位是00000000
尾数 是0000000 00000000 00001001
根据浮点数的计算规则,*p的值就是1.00000000000000000001001*2-127
指数位是-127,是个很小的数 约等于0,由于浮点数的精度问题,打印结果就为0了
[/Quote]
指数位为什么是-127?
怎样算出来的?
coffeesen
2009-12-26
打赏
举报
回复
楼上回答是
含光剑
2009-12-26
打赏
举报
回复
[Quote=引用 11 楼 selooloo 的回复:]
a=(float)c; 是值转换,和计算机的自动类型转换一样的,也就是和a=c; 效果一样,这时计算机帮你完成转换
p=(float*)(&c);是将c的内存形式解释为浮点型,c的值是9,在内存中为 0x0009,二进制为
00000000 00000000 00000000 00001001
将其解释为浮点数就为
0 00000000 0000000 00000000 00001001
符号位 是0
指数 位是00000000
尾数 是0000000 00000000 00001001
根据浮点数的计算规则,*p的值就是1.00000000000000000001001*2-127
指数位是-127,是个很小的数 约等于0,由于浮点数的精度问题,打印结果就为0了
[/Quote]
强人。。仰慕下,指针好像必须要初始化,这样用很不安全。
wangxipu
2009-12-26
打赏
举报
回复
好基础的知识啊
selooloo
2009-12-26
打赏
举报
回复
a=(float)c; 是值转换,和计算机的自动类型转换一样的,也就是和a=c; 效果一样,这时计算机帮你完成转换
p=(float*)(&c);是将c的内存形式解释为浮点型,c的值是9,在内存中为 0x0009,二进制为
00000000 00000000 00000000 00001001
将其解释为浮点数就为
0 00000000 0000000 00000000 00001001
符号位 是0
指数 位是00000000
尾数 是0000000 00000000 00001001
根据浮点数的计算规则,*p的值就是1.00000000000000000001001*2-127
指数位是-127,是个很小的数 约等于0,由于浮点数的精度问题,打印结果就为0了
addr2line
输出
为?:0可能原因
addr2line工具使用时
输出
为??:0的问题
接口是什么?为什么要使用它?
1 什么是接口 接口是一种用来定义程序的协议,它描述可属于任何类或结构的一组相关行为。 接口是一组规则的集合,它规定了实现本接口的类或接口必须拥有的一组规则。体现了自然界“如果你是……则必须能……”的理念。 接口是在一定粒度视图上同类事物的抽象表示。因为“同类事物”这个概念是相对的,它因为粒度视图
不同
而
不同
。 2 为什么要使用接口?而不是直接实现呢? 接口的使用并非总是从设计的角度来考...
['1', '2', '3'].map(parseInt)
输出
什么?为什么?(深度解析)
['1', '2', '3'].map(parseInt)
输出
什么?为什么?
输出
: [1, NaN, NaN] 1.map函数和parseInt函数说明: Array.prototype.map()说明,参考mdn var arr=[] var new_array = arr.map(function callback(currentValue, index, array) { // Ret...
plc
输出
类型有哪些?
(1)继电器
输出
: 优点是
不同
公共点之间可带
不同
的交、直流负载,且电压也可
不同
,带负载电流可达2A/点;但继电器
输出
方式不适用于高频动作的负载,这是由继电器的寿命决定的。其寿命随带负载电流的增加而减少,一般在几十万次至Jl百万次之间,有的公司产品可达1000万次以上,响应时间为10ms。 (2)晶闸管
输出
: 带负载能力为0.2A/点,只能带交流负载,可适应高频动作,响应时间为1ms。 (3)晶体管
输出
: 最大优点是适应于高频动作,响应时间短,一般为0.2ms左右,.
【深度学习基础】什么是卷积?为什么要用卷积?
【深度学习基础】什么是卷积?为什么要用卷积?(一)卷积的原理:1. 卷积核:2. 卷积层参数:2.1 卷积核数:2.2 卷积核的大小:2.3 步长:2.4 填充:3. 池化层:3.1 最大池化层(max pooling):3.2 均值池化层(average pooling):(二)卷积的作用:1. 减少参数量:2. 局部感知:3. 权值共享: (一)卷积的原理: 卷积神经网络是一种前馈型神经网络,...
C语言
69,337
社区成员
243,078
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章