Chinaunix首页 | 论坛 | 博客
  • 博客访问: 274482
  • 博文数量: 138
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 971
  • 用 户 组: 普通用户
  • 注册时间: 2015-03-03 10:05
文章分类

全部博文(138)

文章存档

2016年(1)

2015年(137)

我的朋友

分类: C/C++

2015-06-02 21:22:59

(int)a实际上是以浮点数a为参数构造了一个整型数,-----产生一个新的整型变量,该变量的值是a;  float 到int的转化,舍弃精度
(int&)a则是告诉编译器将a当作整数看(并没有做任何实质上的转换)
 (int&)a 相当于*(int*)&a

(int&)a:将a的引用强制转换为整型,意思是a所在的内存,本来定义的时候为float类型,并初始为1.0f,

但现在我要按int类型解释这段内存(也就是说a所在的内存地址中的数据本来是按float型存储表示的,你非要按int型来解释不可)。



1以整数形式存放和以浮点形式存放其内存数据是不一样的;但是0的整数形式和浮点形式其内存数据是一样的,因此在这种特殊情形下,两者相等(仅仅在数值意义上)。

附:浮点数在计算机中的表达

标准ieee745提出数字系统中的浮点数是对数学中的实数(小数)的近似,同时该标准规定表达浮点数的01序列被分为三部分(三个域):

32位单精度浮点数为例,其具体的转换规则是:首先把二进制小数(补码)用二进制科学计数法表示,比如上面给出的例子1111101.001=1.111101001*2^6。符号位sign表示数的正负(0为正,1为负),故此处填0exponent表示科学计数法的指数部分,请务必注意的是,这里所填的指数并不是前面算出来的实际指数,而(exponent)是等于际指数加上一个数(指数偏移127),偏移量为2^(e-1)-1,其中eexponent的宽度(位数)。对于32位单精度浮点数,exponent宽度为8,因此偏移量为127,所以exponent的值为133,即10000101。之后的fraction表示尾数,即科学计数法中的小数部分11110100100000000000000(共23位)。因此32位浮点数125.125D在计算机中就被表示为01000010111110100100000000000000

     对于32位单精度浮点数,sign1位,exponent8位(指数偏移量是127fraction23。对于64位双精度浮点数,sign1为,exponent11位(指数偏移量是1023fraction52位。

所以 1.0f=1.0*2^0;--->sign=0;exponent=127+0=127=01111111;fraction=0000000000000000000000(32bit);所以整个1.0f:001111111000000000000000000000000000,看成普通整数,表达成十进制是2^29+2^28+...+2^23=1065353216


阅读(891) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~