我有一些像这样的旧代码:

private int ParseByte(byte theByte)
{
        byte[] bytes = new byte[1];
        bytes[0] = theByte;
        BitArray bits = new BitArray(bytes);

        if (bits[0])
            return 1;
        else
            return 0;
}


它很长,我想我可以像这样修剪它:

private int ParseByte(byte theByte)
{
         return theByte >> 7;
}


但是,我没有得到与第一个函数相同的值。该字节包含00000000或10000000。我在这里丢失了什么?我使用的操作员不正确吗?

最佳答案

问题在于,在第一个函数中,位[0]返回最低有效位,但是第二个函数返回最高有效位。修改第二个函数以获取最低有效位:

private int ParseByte(byte theByte)
{
    return theByte & 00000001;
}


要修改第一个函数以返回最高有效位,应使用bits [7]-而不是bits [0]。

关于c# - C#中的移位混淆,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1002266/

10-12 21:36