帮助按位操作

时间:2011-07-08 21:48:12

标签: c# bit-manipulation bitwise-operators bitwise-and

我想对我正在使用的第三方函数进行双重检查,并且我不确定我是否正确地计算出按位逻辑。有人可以在每个场景中为变量'intValue'提供一系列值,这些值会导致每个条件返回true吗?谢谢!

        if ((intValue < 0 && ((intValue & 0xFFFFFF80) == 0xFFFFFF80)) ||
            (intValue & 0x0000007F) == intValue) {

        }
        else if ((intValue < 0 && ((intValue & 0xFFFF8000) == 0xFFFF8000)) ||
            (intValue & 0x00007FFF) == intValue) {

        }
        else if ((intValue < 0 && ((intValue & 0xFF800000) == 0xFF800000)) ||
            (intValue & 0x007FFFFF) == intValue) {

        }
        else {

        }

2 个答案:

答案 0 :(得分:2)

if (intValue == (SByte)intValue) {
     // matches -128...127, i.e. values that fit in one byte
}
else if (intValue == (Int16)intValue) {
     // matches -32768..32767, values that fit in two bytes
}
else if (intValue == ((intValue << 8) >> 8)) {
     // matches -2**23..(2**23-1), values that fit in three bytes
}
else {
     // matches -2**31..(2**31-1), values that need four bytes
}

请注意,如果变量类型已签名,则所有intValue < 0测试都是完全冗余的。

答案 1 :(得分:0)

这是一个提示:

int intValue = int.Parse("FFFFFF80", System.Globalization.NumberStyles.HexNumber);

请参阅:

C# convert integer to hex and back again