如果我有:
signed char * p;
我做了一个比较:
if ( *p == 0xFF ) break;
它永远不会捕获0XFF,但如果我用-1替换它将会:
if ( *p == (signed char)0xFF ) break;
怎么会发生这种情况?这是标志旗吗?我虽然那样0xFF == -1 == 255
.
该值0xFF
是signed int值.C会在进行比较时将其提升*p
为a int
,因此第一个if语句相当于:
if( -1 == 255 ) break;
这当然是假的.通过使用(signed char)0xFF
该语句相当于:
if( -1 == -1 ) break;
它按预期工作.这里的关键点是比较是用int
类型而不是signed char
类型完成的.