这个位转换怎么回事?

时间:2016-07-27 12:58:57

标签: c# bit-manipulation

 private int ControlDecode(byte b)
    {
        int itype = -1;
        int ipacekttype = b & 0xF0;
        switch (ipacekttype)
        {
            case 0x40:
                if ((b & 0x0F) != 0x0F)
                    itype = 0x45;
                else
                    itype = 0x4F;
                break;
            case 0x50:
                itype = 0x45;
                break;
            case 0x00:
                itype = 0x00;
                break;
            case 0x80:
                itype = 0x89;
                break;
            case 0x90:
                itype = 0x89;
                break;


            default:
                break;
        }
        return itype;
    }

如果b = 51,则ipacekttype = 48(根据代码执行)     但是在掩盖时我们应该得到50作为答案    任何人都可以解释一下(b& 0xF0)如何在这里工作吗?

1 个答案:

答案 0 :(得分:2)

看起来您正在混合十进制表示法和十六进制表示法。当您说b=51时,51显示为十进制,因此bn=0x33为十六进制。这解释了为什么ipacekttype=48 - 再次,十进制,因为它是十六进制的ipacekttype=0x30,也就是用0x33掩盖0xF0之后应该是什么。