如下的程序:
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) //这样判断就不会出错了。