注册 登录
编程论坛 C++教室

[讨论]问下这个,面试题目。

neverDie 发布于 2007-05-06 19:48, 654 次点击
float i = 1.0;

cout<<(int)i<<endl;
cout<<(int&)i<<endl;

输出什么?请请解释,
8 回复
#2
lovecsky2007-05-06 21:50

不是地址,是地址的话,每次分配空间后,空间地址有可能会变,而(int &)i输出的是一个定值。

#3
yuyunliuhen2007-05-06 22:03

float i = 1.0;

cout<<(int)i<<endl;//类型转换
cout<<(int&)i<<endl;//转化为整型的引用,引用就是取指针指向的值,本质还是指针,我想考的是看浮点数 1.0 的二进制形式直接作为整型输出的话会是多少吧,整型和浮点型的二进制表示形式不同,第一个方法 C ++会做类型转换的处理,这样浮点型的 1.0 变成整型后会是1,而后面一个会是一个莫明奇妙的数。

#4
neverDie2007-05-06 22:54

可不可以详细解释下,不懂第2的个输出。

#5
幽灵嫖客2007-05-07 06:44
cout<<(float&)i 直接指向float的引用,就是它自身的另外一种访问方式;
cout<<(int &)i 指向int的引用,就好像版主说得是1.0浮点在机器中二进制所对应的整形
不知说得队不?
#6
未入流小菜鸟2007-05-08 21:57
调试了一下,
先输出i的地址,然后通过内存窗口查看,里面的值就是(int &)i的输出值。
4楼版主是正解!!!
#7
jiangzw6252007-05-09 16:47

用这个程序可以看每个c++编译器里任何类型的内存单元的二进制值(从高地址到低地址显示)
#include <iostream>
using namespace std;

template <typename OStream,typename T1>
void GetBinary(OStream outs,T1 in)
{
T1 data = in;
unsigned char c = 1<<7,j = 0,k;
const unsigned char* p = (unsigned char*)&data+sizeof(data)-1;//转到高地址

for(int i = 0 ;i<sizeof(data);++i,--p)
{
c = 1<<7;
for(j = 0;j<8;j++)
{
k = *p & c;
k>>=(7-j);
c>>=1;
outs<<(unsigned int)k;
}
outs<<endl;
}
}

void main()
{
float i = -0.5f;
GetBinary(cout,i);
}

#8
jiushiwo2007-05-09 22:04
1
1065353216
Press any key to continue

第二个不就是地址吗,就是指向 整形的引用
1