C 获取无符号字符中最后2位的值

C 获取无符号字符中最后2位的值,c,bit-manipulation,C,Bit Manipulation,我有一个无符号字符,我需要检查第1位和第2位以找到状态。确定最后2位的最佳方法是什么 我正在尝试执行OR,但结果不正确。任何帮助都将不胜感激。谢谢 例如: 10101000 = off 10101001 = on 10101010 = error 10101011 = n/a if(data_byte_data[0] | 0xfe) //01 else if(data_byte_data[0] | 0xfd) //10; else if(data_byte_data[0] |

我有一个无符号字符,我需要检查第1位和第2位以找到状态。确定最后2位的最佳方法是什么

我正在尝试执行OR,但结果不正确。任何帮助都将不胜感激。谢谢

例如:

10101000 = off
10101001 = on
10101010 = error
10101011 = n/a

if(data_byte_data[0] | 0xfe)
    //01
else if(data_byte_data[0] | 0xfd)
    //10;
else if(data_byte_data[0] | 0xfc)
    //11
else if(data_byte_data[0] | 0xff)
    //00

我会这样做:

v = data_byte_data[0] & 0x03;
switch (v)
{
case 0: ...
case 1: ...
case 2: ...
case 3: ...
}

我会这样做:

v = data_byte_data[0] & 0x03;
switch (v)
{
case 0: ...
case 1: ...
case 2: ...
case 3: ...
}

难道你不应该去做,去找到最后的2位吗`如果数据[0]&0xFE==0xFE@Itsik:那也错了。但是如果数据[0]&0x01==0x01就可以了。@Nick:不,那也错了!它还允许0x03作为两个LSB…@Oli:是的,这也是错误的:你不应该这样做并找到最后的2位吗`如果数据[0]&0xFE==0xFE@Itsik:那也错了。但是如果数据[0]&0x01==0x01就可以了。@Nick:不,那也错了!它还允许0x03作为两个LSB…@Oli:是的,这也是错误的:P
switch ( val & 3 ) {
    case 0: // 00
    case 1: // 01
    case 2: // 10
    case 3: // 11
}
switch(data_byte_dat[0] & 3) {
    case 0: puts("off");    break;
    case 1: puts("on");     break;
    case 2: puts(""error"); break;
    case 3: puts("N/A");
}