2015-11-02 7 views
7

charの8ビットがintの32ビットの部分文字列であるかどうかをチェックしたいと思います。私はそれがより効率的にしたいC - 8ビットが32ビットであるかどうかをチェックする方法?

for (int i = 0; i < 25; i++) { 
     int tmp = a; 
     tmp <<= 24; 
     tmp >>= 24; 
     int res = b^tmp; 
     res <<= 24; 
     res >>= 24; 
     if (res == 0) 
      return 1; 
     else 
      a >>= 1; 
    } 
    return 0; 

a = 0110 1010 1011 0100 0000 0110 1010 0010 (32 bit int) 
b = 0100 0000 (8 bit char) 

is_in(a, b) --> true 

は、ここに私のコードです。

+3

は '' A' "で"、または唯一のバイト境界上のどこにもB'ことはできますか?これまでに何を試みましたか?あなたのコードでどんな問題が発生しましたか? –

+1

キーワード:シフト、マスク、比較。 '<<' or '>>'演算子と '&'演算子を使います。解決策を思いついた上で、困ったときに質問してください。 –

+0

8ビットが32ビットintの決定された位置にしかない場合、AND演算で他のすべてのビットをゼロにして値を直接比較することができます。 – Magisch

答えて

5

さて、あなたは試みることができる...

bool is_in(uint32_t a, uint8_t b) { 
    while (a >= b) { 
    if ((a & 0xff) == b) return true; 
    a >>= 1; 
    } 
    return false; 
} 
+1

両方の引数に 'unsigned'を使用するためにUpvoted、そうでなければ1にシフトインされます。 – dbush

+1

興味深い解決策、ありがとう:) – Johny

+1

明白な解決策です。 –

関連する問題