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