返回信息流RT,下边一段代码:
#include <stdio.h>
#include <string.h>
int main()
{
int a=0xfffffff;
float b=0xfffffff;
printf("a :%d\n",a);
memcpy(&b,&a,sizeof(b));
if(b==b)
printf("Equal!\n");
else
printf("Not equal!\n");
return 0;
}
然后当a的值在int 范围内的话是equal
但是当a值溢出时就是Not equal了,麻烦请教下具体的转换规则以及判断,谢谢!
这是一条镜像帖。来源:北邮人论坛 / cpp / #94088同步于 2016/11/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
c语言==判断问题求解
dxy1
2016/11/27镜像同步8 回复
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
ff ff ff ff表示的不是负无穷大,而是NaN(not a number)。而NaN和任何东西判断相等(包括NaN本身)都是false。
负无穷大是ff 80 00 00。负无穷大等于且只等于负无穷大。
【 在 mli 的大作中提到: 】
: memcpy使变量b所在的内存数据变为0xffffffff,也就是负无穷大,无穷大不等于任何数
多谢暖神纠正
-
按IEEE标准搞三, 阶码全1,尾数全0的是INF, 阶码全1尾数非全0的就NaN
【 在 nuanyangyang 的大作中提到: 】
: ff ff ff ff表示的不是负无穷大,而是NaN(not a number)。而NaN和任何东西判断相等(包括NaN本身)都是false。
: 负无穷大是ff 80 00 00。负无穷大等于且只等于负无穷大。
:
【 在 nuanyangyang 的大作中提到: 】
: ff ff ff ff表示的不是负无穷大,而是NaN(not a number)。而NaN和任何东西判断相等(包括NaN本身)都是false。
: 负无穷大是ff 80 00 00。负无穷大等于且只等于负无穷大。
:
那如果我赋值少一个f就是相等了?比这个数大的都是NaN?
读ieee754吧,不长,但读完以后问题都解决了。
【 在 dxy1 的大作中提到: 】
:
: 那如果我赋值少一个f就是相等了?比这个数大的都是NaN?
为啥直接赋值是equal呢? memcpy却是not equal
float b = 0xffffffff;
if (b == b) cout << "equal" << endl;
else cout << "not equal" << endl;
【 在 nuanyangyang 的大作中提到: 】
: ff ff ff ff表示的不是负无穷大,而是NaN(not a number)。而NaN和任何东西判断相等(包括NaN本身)都是false。
: 负无穷大是ff 80 00 00。负无穷大等于且只等于负无穷大。
:
直接赋值会涉及一次转换:把整型的数转换成拥有相同值的浮点数,或者最接近的能表示的浮点数。而memcpy是逐字节拷贝的。
【 在 xiaobing307 的大作中提到: 】
: 为啥直接赋值是equal呢? memcpy却是not equal
: [code=c]
: float b = 0xffffffff;
: ...................