2011-02-02 3 views
1

부호없는 문자가 있고 상태를 찾기 위해 비트 1과 2를 검사해야합니다. 마지막 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 
+0

당신이해야 할 마지막 2 개 비트를 찾을 생각되지 않습니다? 'if ((data [0] & 0xFE) == 0xFE) – Itsik

+0

@Itsik : 그건 잘못된 것입니다. 그러나 if ((data [0] & 0x01) == 0x01)'괜찮을 것입니다. –

+0

@ 닉 : 아니, 그건 너무 잘못 될 것이다! 그것은 또한 두 개의 lsbs로 0x03을 허용 할 것입니다 ... –

답변

8

나는 같은 것을 할 것 :

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

    case 1: 
    // 01 
    break; 

    case 2: 
    // 10 
    break; 

    case 3: 
    // 11 
    break; 
} 
0
switch (val & 3) { 
    case 0: // 00 
    case 1: // 01 
    case 2: // 10 
    case 3: // 11 
} 
3
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"); 
}