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:
- "5* *" - yukarıdaki kod çalışıyor neden hakkında Açıklama.
- "Board Representation > Bitboards > BitScan" bu sorunun Detaylı analizini, satranç programlama üzerine özel bir odaklanma ile
Bunu Paylaş:
Windows geçici dosya kaydetmek için ko...
Raylar 3.2, ÖNEMLİ: kullanıcı kimlik d...
Ne kadar büyük bir yapı türü çalışma z...
İlk (muhtemelen) bir ilişkisel dizi ön...
numarasını: ÖNEMLİ: Eş kimlik doğrulam...