2
    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

4

1 回答 1

4
  • 将值转换为 unsigned char 时,您正在进行显式类型转换。

  • 当您使用 屏蔽值时0xFF,会发生隐式类型转换

您有带符号的字符data[2]0xFF按位与运算符的操作数。因为其中一个操作数 ( 0xFF) 不能放入有符号字符中,所以两个操作数都被隐式转换为无符号类型。

于 2012-09-28T08:39:09.983 回答