检测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,在这里不太适合吧
整型倒是可以,,,
楼主不妨写一个小函数,将它以二进制的形式打印出来,看的会清晰点
[解决办法]
[解决办法]
这个不是比较的内存把?转换了很多次,最后比较的是2个double浮点数的大小
直接memcmp不好么?
[解决办法]
[解决办法]
int a;
float b;
if( * ( ( int * )( & b ) ) == a )//取b地址,转换整形指针,和a比较是否相等
{
}
比两个变量内的二进制数据是否相等而已
至于什么位模式?没听过
[解决办法]
* ( ( int * )( & b ) )
将b的地址强制转换为类型int *,然后取其int值。
简短捷说就是将b变量中保存的4个字节当int看