标题:一个C语言问题
只看楼主
QQ578070052
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2009-4-4
结帖率:50%
已结贴  问题点数:20 回复次数:6 
一个C语言问题
问题如下:
从下面选出与 043 相等的项, 然后送入其编号。

第一组
1.15   2.0x23   3.3.5E+1    4.17+18

做错了。再做一次!

正确! 做得很好! 请把 043 转换为 10 进制数。043 和十进制数 35 相等。3.5E+1 是一个实型数, 故它和 043 不相等。0x23 和 2*16+3=35=043 是相等的。

正确答案是: 2, 4

[color=Red]为什么说""3.5E+1 是一个实型数, 故它和 043 不相等。?/???"[/color]
搜索更多相关主题的帖子: TAG 
2009-07-19 15:42
mfh
Rank: 6Rank: 6
等 级:侠之大者
帖 子:179
专家分:411
注 册:2009-5-31
得分:2 
不是很明白你的意思!
2009-07-19 16:20
gjb99
Rank: 1
等 级:新手上路
帖 子:3
专家分:2
注 册:2009-7-20
得分:2 




2009-07-20 10:06
黒渍
Rank: 2
等 级:论坛游民
帖 子:57
专家分:41
注 册:2009-7-16
得分:2 
可能是说:3.5e+1为浮点型的数据,35是为整型的,所以不相等。。。
晕晕的,不知道什么意思。。。

踏实学C
/*我的编程飞信群:9401431 互相学习,共同进步*/
2009-07-20 15:19
zzzely
Rank: 1
等 级:新手上路
帖 子:22
专家分:2
注 册:2009-7-9
得分:2 
同不懂~
2009-07-20 16:20
金多虾
Rank: 2
等 级:论坛游民
帖 子:153
专家分:99
注 册:2009-6-9
得分:2 
把你的问题说清楚一点!
2009-07-20 23:21
prankmoon
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:161
专家分:921
注 册:2009-7-21
得分:2 
3.5E+1 和 35 是在存储形式上的不相等。可以通过下面这个不完全测试来发现:

/* our test function */
int compare_test(double a, int b)
{
    int flag = 0;
    char p_1[8] = {0};
    char p_2[8] = {0};

    /* we compare a and b with memcpy */
    memcpy(p_1, (const char *)(&a), 8);
    memcpy(p_2, (const char *)(&b), 8);
   
    if (memcmp(p_1, p_2, 8) == 0)
    {
        flag = 1;
    }
    else
    {
        flag = 0;
    }

    return flag;
}

void main()
{
    int ret = 0;
   
    double a = 3.5E+1;
    int b = 35;
   
    /* test our target */
    ret = compare_test(a, b);
    if (ret != 0)
    {
        printf("a and b are equal\n");
    }
    else
    {
        printf("a and b is not equal\n");
    }
   
    return 0;
}

程序执行后返回:
a and b is not equal

上面的测试基于这一假设:如果两个变量的数值相等,那么他们在内存中的表现形式也应该完全相同。这个假设可以通过反证法来证明其必为真。

如果使用 if (a == b) 直接把 3.5E+1 和 35 进行比较,编译器会把 35 先转换为浮点型的35.0,然后和3.5E+1进行比较,而此时,两者恰好相等,所以这个时候表象上的相等掩盖了事实上的不相等。

BTW: 一般说来,对于浮点数不应该使用 == 符号来测试其是否相等,而应使用 <= 或 >= 来测试,原因诸多书上都有讲到(推荐参看林锐博士的《高质量C++/C编程指南》)。

[[it] 本帖最后由 prankmoon 于 2009-7-21 05:02 编辑 [/it]]
2009-07-21 05:00



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-279814-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.756771 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved