数值比较应该注意的一点

44 篇文章 1 订阅

如下的程序:

short m=0xFFFF;
if((unsigned)m == (unsigned)0xFFFF){
    printf("YES\n");
}else{
    printf("NO\n");
    printf("m=%u, 0xFFFF=%u\n", (unsigned)m, (unsigned)0xFFFF);
}

输出的结果看似应该为“YES”,实际上的输出结果应该为

NO

m=4294967295, 0xFFFF=65535

总结:遇到数与变量相比较时,应该讲变量或数的无关的容易出错的位屏蔽掉; 如下面的处理:    (注: &0xFFFF是为了屏蔽掉无关的位,防止出错)

if((unsigned)(m&0xFFFF) == (unsigned)(0xFFFF&0xFFFF)   //这样判断就不会出错了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值