首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

检测float跟int中0的位模式是否相同?【C专家编程】

2012-08-29 
检测float和int中0的位模式是否相同?【C专家编程】c专家编程,中文版,P2141.位模式,就是0~1串吧?2.C/C++ code

检测float和int中0的位模式是否相同?【C专家编程】
c专家编程,中文版,P214

1.位模式,就是0~1串吧?
2.

C/C++ code
#include<stdio.h>int main(void){    printf("sizeof double is:%d\n",sizeof(double));    printf("sizeof int    is:%d\n",sizeof( int ));    double d0=0.0;    int    i0[2]={0,0};    if(*(double*)i0==d0){        puts("is the same!");    }    else {        puts("not the same!");    }    return 0;}//output:is the same!

我的思路是上面这样的,正确吗?或者另解?谢谢。

[解决办法]
我想是正确的吧,不过如果让我一开始想这个问题我肯定会转换成整型比较,但是这样得比较两次,你这样还省事些。

转换成整型还可以直接看浮点型在内存里到底是怎么存的
[解决办法]
double型的==不是按位比较,你要用整形的比较
比如int*p=(int*)&d0;
if(p[0]==i0[0]&&p[1]==i0[1])
[解决办法]
double 不能这么直接判断是否相等,它本身不是一个准确值

一般
abs(num1-num2)<0.00……01,在这里不太适合吧

整型倒是可以,,,

楼主不妨写一个小函数,将它以二进制的形式打印出来,看的会清晰点
[解决办法]
探讨

回5楼:
如您所述,得出的结果是:not !
我想了想,会不会是double型的在memcpy函数中类型转化而被改变了原来的位模式?(float)0.9==(int)0
memcpy()来本就用来比较字符串的啊。
您的意见呢?

[解决办法]
这个不是比较的内存把?转换了很多次,最后比较的是2个double浮点数的大小
直接memcmp不好么?
[解决办法]
探讨

google IEEE浮点数
float的0和int 0内存是一样的

[解决办法]
int a;
float b;
if( * ( ( int * )( & b ) ) == a )//取b地址,转换整形指针,和a比较是否相等
{

}

比两个变量内的二进制数据是否相等而已
至于什么位模式?没听过
[解决办法]
* ( ( int * )( & b ) )
将b的地址强制转换为类型int *,然后取其int值。
简短捷说就是将b变量中保存的4个字节当int看

热点排行