使用0xFF屏蔽char和转换(unsigned char)之间有什么区别

时间:2012-09-28 08:05:51

标签: c casting char unsigned bit-masks

    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进行屏蔽会产生什么影响?

1 个答案:

答案 0 :(得分:4)

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

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

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