2015-11-02 38 views
7

bir char 8 bit, bir int 32 bitlik bir alt olup olmadığını kontrol etmek istiyorum. Ben daha verimli istiyorumC - 8 bit 32 bit olup olmadığını nasıl kontrol edelim?

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 

İşte benim kodudur. Herhangi bir fikrin var mı?

+3

'a' veya yalnızca bayt sınırları üzerinde' "içinde" herhangi bir yerde olabilir b' miyim? Şimdiye kadar ne denediniz? Kodunuzda hangi sorunlarla karşılaştınız? –

+1

Anahtar Kelimeler: vardiya, maske ve karşılaştır. <<' or '>> operatörlerini ve '&' operatörünü kullanın. Bir çözüm bulup, zorluklarla karşılaştığınızda sorular sorun. –

+0

8 bit yalnızca 32bit int'nin belirlenmiş bir konumunda olabilirse, diğerlerini AND işlemleriyle sıfırlayabilir ve değerleri doğrudan karşılaştırabilirsiniz. – Magisch

cevap

5

Eh, deneyebiliriz ...

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

Upvoted, aksi takdirde kaymış 1'in varlığının ile bitirmek. – dbush

+1

ilginç çözüm sayesinde :) – Johny

+1

bariz çözüm. –

İlgili konular