SORU
22 Mart 2009, Pazar


En yüksek set bit (msb) C bir tam sayı bulmak için en verimli ve hızlı/yolu nedir?

Ben bazı tamsayı n, ve bilmek istiyorum pozisyonun en önemli bit (yani, en az önemli bit sağında mı, bilmek istiyorum pozisyonun en sol bit yani 1), En hızlı/en etkili yöntemi bulmak?

POSIX dizeleri ffs() bir yöntem desteklediğini biliyorum.h ilk seti bit bulmak için, ama fls() ilgili bir yöntem gibi görünmüyor.

Atladığım bunu çok açık bir yol var mı?

Ne taşınabilirlik için POSIX fonksiyonları kullanamazsın durumlarda?

Ve 64 bit mimarileri 32 (kod listelerinin çoğu yalnızca 32 bit üzerinde çalışmak istiyorlar değer vermez gibi) üzerinde çalışan bir çözüm Ne olacak. Edit:

CEVAP
23 Mart 2009, PAZARTESİ


GCC has:

 -- Built-in Function: int __builtin_clz (unsigned int x)
     Returns the number of leading 0-bits in X, starting at the most
     significant bit position.  If X is 0, the result is undefined.

 -- Built-in Function: int __builtin_clzl (unsigned long)
     Similar to `__builtin_clz', except the argument type is `unsigned
     long'.

 -- Built-in Function: int __builtin_clzll (unsigned long long)
     Similar to `__builtin_clz', except the argument type is `unsigned
     long long'.

Bu süslü bir bit öldürmek algoritmaları, ya da tek bir talimat olsun, onlara bir şeyler geçerli platform için oldukça verimli çevrilmiş olmasını istiyorum.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • jbignacio

    jbignacio

    13 Mart 2006
  • Matthew Morrill

    Matthew Morr

    15 EKİM 2011
  • rekjavicxxx

    rekjavicxxx

    28 EKİM 2007