For-Schleife ohne die zweite Bedingung, also die boolean überprüfen?

Muss ich eine Funktion schreiben, die berechnet den Boden der Logarithmus zur Basis 16 von unsigned int übergeben. Gibt es Einschränkungen, was die Operatoren und was Konstanten, die wir verwenden dürfen, und wir können nur speziell for Schleifen.

Für die Klarheit, auf die wir nicht verwenden bedingte Anweisungen(if, else, switch ... ). Der Funktionsprototyp lautet:

int floor_log16(unsigned int x); 

Erlaubt Operatoren: ++ -- = & | ~ ^ << ! >>

Erlaubt Konstanten: 1 2 3 4 8 16

Schrieb ich eine version des Programms wie folgt:

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

    count--;

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

    return count;
}

die scheint zu funktionieren wie gewünscht. Jedoch, ich erkannte, dass, basierend auf die späteren Funktionen und die Beschreibung der benötigten Funktionalität, die wir haben, zu schreiben, bemerkte ich, dass unter "zugelassene Bediener" manchmal > und < aufgeführt wurden.

Ich folgere dies impliziert, dass da für die floor_log16 Funktion, die oben aufgeführt sind, waren wir nicht explizit gesagt, zu verwenden > oder < ich kann nur annehmen, dass die Lösung die oben gepostet werden, werden nicht akzeptiert.

Lässt mich das ziemlich verwirrt, weil ich nicht verstehe, wie können Sie möglicherweise haben eine for-Schleife ohne eine boolean überprüfen?

Ist nicht die ganze Idee, eine Schleife zu Durchlaufen, wenn eine Bedingung erfüllt ist?

  • Bei Interesse halber, kann man eine if-Anweisung mit einer for-Schleife, also die if-Anweisung Einschränkung ist etwas trivial ist (ähnlich für die else) - if (condition) statement; = for(;condition;) {statement; break;}, aber ich glaube nicht, dass Sie gemeint sind zu tun.
  • Vielleicht so etwas wie for(;x;x>>4) ? die Stoppt, wenn x == 0
  • "Ich verstehe nicht, wie können Sie möglicherweise haben eine for-Schleife ohne eine boolean überprüfen?" -- Die for-Schleife selbst hat eine boolean check ... entweder es geht weiter oder endet, je nach Wert eines Ausdrucks. "Ist das nicht, die ganze Idee einer Schleife zu Durchlaufen, wenn eine Bedingung erfüllt ist?" -- Nein, es sind zu Durchlaufen, während der Ausdruck nicht null ist. Dies würde Ihnen klar sein, wenn Sie tatsächlich die Dokumentation Lesen, anstatt zu philosophieren auf "die ganze Idee" der Dinge. Berücksichtigen Sie, dass die Schüler mit der richtigen geistigen Fähigkeiten erhalten bessere Noten und bekommen die jobs.
  • int count = (1 != 1) ... "!=" ist nicht eine zulässige operator. index <<= 4 ... auch nicht erlaubt operator, aber index = index << 4 ist ok.
  • Ich denke, das erlaubt Operatoren genug gewesen, um diese Aufgabe zu erfüllen.
Schreibe einen Kommentar