首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 一道有意思的面试题
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-30 18:00:11 楼主
    float a = 1.0f;
    cout < < (int)a < < endl;
    cout < < (int&)a < < endl;
    cout < < boolalpha < < ( (int)a == (int&)a ) < < endl; // 输出什么?
    float b = 0.0f;
    cout < < (int)b < < endl;
    cout < < (int&)b < < endl;
    cout < < boolalpha < < ( (int)b == (int&)b ) < < endl; // 输出什么?

    输出啥?
    不明白 (int &)a是啥意识?为啥两个比较的出结果不同。
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-30 18:14:271楼 得分:0
    ...
    cout < < boolalpha < < ( (int)a == (int&)a ) < < endl;
    // 输出 false, 因为 float 的 1 和 int 的 1 在内存里的表示不一样。
    ...
    cout < < boolalpha < < ( (int)b == (int&)b ) < < endl; // 输出 true
    // 输出 true, 因为 float 的 0 和 int 的 0 在内存里的表示是一样的。

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-30 18:22:092楼 得分:0
    (int &)a 就表示 不管 a 是什么,我都当他是一个int变量。
    从机器码的角度来说,变量a会被翻译成一个内存地址,(int &)a 就是说,这个内存地址里的内容它是一个整数。

    (int)a 呢不同:如果 a 不是整数,就会按规则转换成整数,存入另一个地址(或临时变量)中去。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-30 18:30:523楼 得分:0

    浮点数的 1.0f 在内存里是这样表示的:
    0011 1111 1000 0000 00000000 00000000
    这个32位二进制数被当作整数输出就是:
    1065353216
    而整数的 1 在内存里是这样表示的:
    0000 0000 0000 0000 00000000 00000001

    所以 (int)a != (int&)a

    浮点的0和整数的0 在内存里都是:
    0000 0000 0000 0000 00000000 00000000

    所以 (int)b == (int&)b
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-30 18:52:564楼 得分:0
    学习来了...
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-30 18:57:165楼 得分:0
    引用 1 楼 icansaymyabc 的回复:
    ...
    cout < < boolalpha < < ( (int)a == (int&)a ) < < endl;
    // 输出 false, 因为 float 的 1 和 int 的 1 在内存里的表示不一样。
    ...
    cout < < boolalpha < < ( (int)b == (int&)b ) < < endl; // 输出 true
    // 输出 true, 因为 float 的 0 和 int 的 0 在内存里的表示是一样的。

    up
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-30 21:48:416楼 得分:0
    引用 3 楼 icansaymyabc 的回复:

    浮点数的 1.0f 在内存里是这样表示的:
    0011 1111 1000 0000 00000000 00000000
    这个32位二进制数被当作整数输出就是:
    1065353216
    而整数的 1 在内存里是这样表示的:
    0000 0000 0000 0000 00000000 00000001

    所以 (int)a != (int&)a

    浮点的0和整数的0 在内存里都是:
    0000 0000 0000 0000 00000000 00000000

    所以 (int)b == (int&)b

    UP
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-30 22:00:247楼 得分:0
    mark
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-02 16:00:228楼 得分:0
    学习了,谢谢你的帖子
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-02 16:04:169楼 得分:0
    哈哈
    有长知识了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-02 16:07:1910楼 得分:0
    输出
    1
    1065353216
    false
    0
    0
    true


    float 的 1 和 int 的 1 在内存里的表示不一样。

    float 的 0 和 int 的 0 在内存里的表示一样。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-03 14:44:0711楼 得分:0
    确实很有意思
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-03 16:28:3712楼 得分:0
    学习。
    up
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • k2eats
    • 等级:
    发表于:2008-06-04 10:31:5613楼 得分:0
    引用 2 楼 icansaymyabc 的回复:
    (int &)a 就表示 不管 a 是什么,我都当他是一个int变量。
    从机器码的角度来说,变量a会被翻译成一个内存地址,(int &)a 就是说,这个内存地址里的内容它是一个整数。

    (int)a 呢不同:如果 a 不是整数,就会按规则转换成整数,存入另一个地址(或临时变量)中去。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-04 10:49:2614楼 得分:0
    引用 3 楼 icansaymyabc 的回复:

    浮点数的 1.0f 在内存里是这样表示的:
    0011 1111 1000 0000 00000000 00000000
    这个32位二进制数被当作整数输出就是:
    1065353216
    而整数的 1 在内存里是这样表示的:
    0000 0000 0000 0000 00000000 00000001

    所以 (int)a != (int&)a

    浮点的0和整数的0 在内存里都是:
    0000 0000 0000 0000 00000000 00000000

    所以 (int)b == (int&)b

    学习
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-04 11:00:4615楼 得分:0
    学习。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-04 11:26:5016楼 得分:0
    引用 3 楼 icansaymyabc 的回复:

    浮点数的 1.0f 在内存里是这样表示的:
    0011 1111 1000 0000 00000000 00000000
    这个32位二进制数被当作整数输出就是:
    1065353216
    而整数的 1 在内存里是这样表示的:
    0000 0000 0000 0000 00000000 00000001

    所以 (int)a != (int&)a

    浮点的0和整数的0 在内存里都是:
    0000 0000 0000 0000 00000000 00000000

    所以 (int)b == (int&)b



    up
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-04 13:26:4517楼 得分:0
    (int&)应该是整型引用吧?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-04 13:55:5118楼 得分:0
    3楼正解
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-04 14:12:1719楼 得分:0
    二楼正解,把a当作是整型的引用。
    (int&) a 相当于*(reinterpret_cast <int*>(&a))
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zxwl
    • 等级:
    发表于:2008-06-04 14:41:5920楼 得分:0
    学习了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-04 14:55:0621楼 得分:0
    引用 3 楼 icansaymyabc 的回复:

    浮点数的 1.0f 在内存里是这样表示的:
    0011 1111 1000 0000 00000000 00000000
    这个32位二进制数被当作整数输出就是:
    1065353216
    而整数的 1 在内存里是这样表示的:
    0000 0000 0000 0000 00000000 00000001

    所以 (int)a != (int&)a

    浮点的0和整数的0 在内存里都是:
    0000 0000 0000 0000 00000000 00000000

    所以 (int)b == (int&)b
    学习!

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-04 15:10:4822楼 得分:0
    又学了一点,
    3q
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-04 18:24:1323楼 得分:0
    学习了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-17 15:26:2224楼 得分:0
    mark...
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-17 16:22:3925楼 得分:0
    up
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • k2eats
    • 等级:
    发表于:2008-07-17 22:30:0026楼 得分:0
    cout < <(int&)a 等价于:
    cout < <*((int*)(&a)) < <endl;

    你可以看看浮点数在计算机内部的表示,就可以算出1065353216这个值了!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-17 22:41:0427楼 得分:0
    没啥意思
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-18 04:00:3528楼 得分:0
    引用 1 楼 icansaymyabc 的回复:
    ...
    cout < < boolalpha < < ( (int)a == (int&)a ) < < endl;
    // 输出 false, 因为 float 的 1 和 int 的 1 在内存里的表示不一样。
    ...
    cout < < boolalpha < < ( (int)b == (int&)b ) < < endl; // 输出 true
    // 输出 true, 因为 float 的 0 和 int 的 0 在内存里的表示是一样的。


    2楼说的很对! int& a ; 代表a的真实值,而不是a的地址。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-18 05:09:3429楼 得分:0
    引用 3 楼 icansaymyabc 的回复:

    浮点数的 1.0f 在内存里是这样表示的:
    0011 1111 1000 0000 00000000 00000000
    这个32位二进制数被当作整数输出就是:
    1065353216
    而整数的 1 在内存里是这样表示的:
    0000 0000 0000 0000 00000000 00000001

    所以 (int)a != (int&)a

    浮点的0和整数的0 在内存里都是:
    0000 0000 0000 0000 00000000 00000000

    所以 (int)b == (int&)b

    正解
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-18 08:30:3730楼 得分:0
    学习了,up
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved