2011-02-02 10 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

@ニック:いいえ、それも間違っているでしょう!それはまた、2つの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"); 
} 
関連する問題