+ -
当前位置:首页 → 问答吧 → memcmp的问题

memcmp的问题

时间:2010-08-05

来源:互联网

int a=99;
int b=555;
printf("memcmp=[%d]\n",memcmp(&a,&b,sizeof(int)));

打印结果:
memcmp=[1]

99<555,结果应该是一个小于0的值才对.为什么会得到1?

int a=1;
int b=2;
printf("memcmp=[%d]\n",memcmp(&a,&b,sizeof(int)));

打印结果:
memcmp=[-1]

下面这个是正确的

作者: ilwmin   发布时间: 2010-08-05

memcmp是逐字节比较,不是整数比较。

作者: hellioncu   发布时间: 2010-08-05



QUOTE:
memcmp是逐字节比较,不是整数比较。
hellioncu 发表于 2010-08-05 15:10



99的二进制是1100011
555的二进制是1000101011

你的意思是先用1100011和00101011进行比较?因为1100011>00101011,所以最后的比较结果就是99>555了.
是这个意思吗?

作者: ilwmin   发布时间: 2010-08-05

他就是这个意思,估计是小端的,所以先比到的是低8位,而低8位是99的比较大,555的只剩下了43那样

作者: daybreakcx   发布时间: 2010-08-05



QUOTE:
99的二进制是1100011
555的二进制是1000101011

你的意思是先用1100011和00101011进行比较?因为1100 ...
ilwmin 发表于 2010-08-05 15:22




    嗯,另外跟字节序也有关系

作者: hellioncu   发布时间: 2010-08-05

在i386上,内存中样子是这样的:

a = 99  =   0x63 0x00 0x00 0x00
b = 555 =  0x0b 0x22 0x00 0x00

memcmp(&a,&b,sizeof(int);中。因为 0x63 > 0x0b 故 返回大于0的值

作者: zhangsuozhu   发布时间: 2010-08-05



QUOTE:
在i386上,内存中样子是这样的:

a = 99  =   0x63 0x00 0x00 0x00
b = 555 =  0x0b 0x22 0x00 0x00

...
zhangsuozhu 发表于 2010-08-05 15:40




    打错了吧,b = 555 =  0x2b 0x02 0x00 0x00

作者: daybreakcx   发布时间: 2010-08-05

相关阅读 更多

热门下载

更多