For-Schleife ohne die zweite Bedingung, d. H. Die Boolesche Prüfung?

Ich muss eine Funktion schreiben, die den Boden der logarithmischen Basis 16 eines übergebenen vorzeichenlosen int berechnet. Es gibt Einschränkungen, welche Operatoren und welche Konstanten wir verwenden dürfen, und wir können nur spezifisch verwendenfor Schleifen.

Aus Gründen der Klarheit können wir keine bedingten Anweisungen verwenden (wenn sonst switch ...). Der Funktionsprototyp ist:

int floor_log16(unsigned int x); 

Zulässige Operatoren:++ -- = & | ~ ^ << ! >>

Zulässige Konstanten:1 2 3 4 8 16

Ich habe eine Version des Programms wie folgt geschrieben:

int floor_log16(unsigned int x) {
    int index=1;
    int count=(1!=1);

    count--;

    for(; index<=x; index<<=4) {
        count++;
    }

    return count;
}

was wie gewünscht zu funktionieren scheint. Allerdings wurde mir klar, dass wir aufgrund der späteren Funktionen und der Beschreibung der benötigten Funktionalität, die wir schreiben müssen, manchmal das unter "Erlaubte Operatoren" bemerkten> und< aufgeführt wurden.

Ich schließe daraus, dass seit demfloor_log16 Die oben aufgeführte Funktion wurde uns nicht ausdrücklich zur Verwendung empfohlen> oder<Ich kann nur davon ausgehen, dass die oben gepostete Lösung nicht akzeptiert wird.

Das macht mich ziemlich verwirrt, weil ich nicht verstehe, wie Sie möglicherweise eine for-Schleife ohne eine boolesche Prüfung haben können?

Ist nicht die ganze Idee einer Schleife zum Iterieren, während eine Bedingung erfüllt ist?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage