unsigned char Mid;
if( (data[2]) == 0x9A){
Mid = data[5];
if( (Mid == 1) || (Mid == 2) || (Mid == 3) )
return(Mid);
上面的代码给出了:
警告:由于数据类型的范围有限,比较始终为假
我的预期错误。
如果我输入
就没关系if( (unsigned char)data[2] == 0x9A){
或
if( (data[2]&0xFF) == 0x9A){
我理解第一个,但第二个会发生什么?
使用0xFF
进行屏蔽会产生什么影响?
答案 0 :(得分:4)
将值转换为unsigned char时,您正在进行显式类型转换。
使用0xFF
屏蔽该值时,会发生隐式类型转换。
您具有已签名的字符data[2]
和0xFF
作为按位AND运算符的操作数。因为其中一个操作数(0xFF
)不能放入有符号的char中,所以两个操作数都被隐式转换为无符号类型。