当前位置:  开发笔记 > 编程语言 > 正文

C变量和常数值比较不匹配

如何解决《C变量和常数值比较不匹配》经验,为你挑选了1个好方法。

如果我有:

signed char * p;

我做了一个比较:

if ( *p == 0xFF )
   break;

它永远不会捕获0XFF,但如果我用-1替换它将会:

if ( *p == (signed char)0xFF )
   break;

怎么会发生这种情况?这是标志旗吗?我虽然那样0xFF == -1 == 255.



1> Greg Hewgill..:

该值0xFF是signed int值.C会在进行比较时将其提升*p为a int,因此第一个if语句相当于:

if( -1 == 255 ) break;

这当然是假的.通过使用(signed char)0xFF该语句相当于:

if( -1 == -1 ) break;

它按预期工作.这里的关键点是比较是用int类型而不是signed char类型完成的.

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有