检测float跟int中0的位模式是否相同?【C专家编程】
检测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看