笔记——float型数据的int引用

做题的时候遇到的:

float a = 1.0f;
cout << (int)a << endl;
cout << &a << endl;
cout << (int&)a << endl;
cout << boolalpha << ( (int)a == (int&)a ) << endl; //输出什么?
float b = 0.0f;
cout << (int)b << endl;
cout << &b << endl;
cout << (int&)b << endl;
cout << boolalpha << ( (int)b == (int&)b ) << endl; //输出什么?


分析:

int&是一个引用类型,可以少产生一个临时对象,(int&)a的意思是将从a开始的内容解释为一个int型的引用,那么本题的关键就在于float的1、0和int的1、0在内存中的表示是否一样。

float类型的数据在计算机中占4字节,32位。将其由高到低位编号31~0,则31位为符号位,30~23位为指数位,22~0位为尾数位。

1.0f = 1.0*2^0 = 0 01111111 00000000000000000000000 = 0x3f800000

符号位0为正,代表正。

指数位为0的移码127,8位二进制可表示0-255的无符号整数,指数有正有负,因此加上127的移码。

尾数即1.0,由于采用科学计数法,第一位总是1,所以没必要保留,只要表示后面小数部分即可。

把3f800000当作int输出,结果应该是3f800000的十进制1065353216,不是1

而0.0f在内存中和0的布局一致都是全0


做题后记住一个结论吧:

float的1和int的1在内存中表示是不一样的,float的0和int的0在内存中表示是一样的


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值