SORU
16 NİSAN 2009, PERŞEMBE


Belirlenen en az önemli bit konumu

Verimli bir şekilde 4 olurdu 0x0FF0 için, örneğin bir tamsayı ayarlanmış en az önemli bit konumunu belirlemek için arıyorum.

Önemsiz bir uygulama bu

unsigned GetLowestBitPos(unsigned value)
{
   assert(value != 0); // handled separately

   unsigned pos = 0;
   while (!(value & 1))
   {
      value >>= 1;
        pos;
   }
   return pos;
}

Bazı döngüleri sıkmak için nasıl herhangi bir fikir?

(Not: bu soru böyle şeyler, insanlar xyzoptimization kötü olduğunu bana söylemek için.) zevk insanlar içindir

[Düzenle]Herkese fikirleri için teşekkürler! Bir kaç başka şeyler de öğrendim. Serin!

CEVAP
16 NİSAN 2009, PERŞEMBE


Bit Twiddling Hacks koleksiyon mükemmel, şey, bir parça kesmek öldürmek, performans/optimizasyon tartışma ile bağlı bulunmaktadır. Senin sorunun (site) için benim en sevdiğim çözüm «ve»: . çarpın arama

unsigned int v;  // find the number of trailing zeros in 32-bit v 
int r;           // result goes here
static const int MultiplyDeBruijnBitPosition[32] = 
{
  0, 1, 28, 2, 29, 14, 24, 3, 30, 22, 20, 15, 25, 17, 4, 8, 
  31, 27, 13, 23, 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, 10, 9
};
r = MultiplyDeBruijnBitPosition[((uint32_t)((v & -v) * 0x077CB531U)) >> 27];

Yardımcı kaynaklar:

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ama Jenna

    Ama Jenna

    29 NİSAN 2011
  • MandMEvangelists

    MandMEvangel

    28 Ocak 2008
  • Murray Winiata

    Murray Winia

    2 ŞUBAT 2009