10 Stimmen

Herausfinden, wie viele binäre Ziffern eine bestimmte ganze Zahl hat

Mögliches Duplikat:
Berechnung der schnellen logarithmischen Basis-2-Obergrenze

Wie kann man am schnellsten herausfinden, wie viele Binärziffern eine bestimmte ganze Zahl hat, wenn sie in C/C++ von Dezimal- in Binärzahlen umgewandelt wird?

Ex. 47 (10) \= 101111 (2)

47 hat also 6 Ziffern in binärer Darstellung.

2voto

Drew Dormann Punkte 54591

Wenn die ganze Zahl mindestens 1 wären die erforderlichen Bits:

floor(log2(x)) + 1

2voto

Mike Seymour Punkte 242473

Wenn Geschwindigkeit wichtiger ist als Portabilität, dann bieten einige Compiler eine Funktion zum Zählen führender Nullen. Diese kompiliert auf einigen Prozessoren, einschließlich moderner x86- und ARM-Prozessoren, zu einer einzigen Maschinenanweisung. Zum Beispiel mit GCC:

CHAR_BIT * sizeof x - __builtin_clz(x)

1voto

dfens Punkte 5235

Versuchen Sie, Logarithmen zu verwenden:

ceil(log2(x))

0voto

MetallicPriest Punkte 27365

Eine Möglichkeit ist diese...

unsigned int count_bits(unsigned int n)
{
    unsigned int count = 0;

    if ( n <= 1 )
      return 1;

    do
      count++;
    while( n >>= 1 );

    return count;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X