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, wennx == 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, aberindex = index << 4
ist ok.- Ich denke, das erlaubt Operatoren genug gewesen, um diese Aufgabe zu erfüllen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, zunächst
for
-Schleife ohne die boolean-check ist völlig in Ordnung. Zum Beispiel,ist eine Allgemeine Art und Weise des Schreibens
Zweite, mit einem
for
-Schleife, mit anderen teilen, aber ohne check boolean ist immer noch sinnvoll, wie Sie können, beenden Sie es mitreturn
oderbreak
.Und die Letzte Sache. Es gibt Unmengen von Möglichkeiten, sich einen booleschen ohne Verwendung
<
und>
. Zum Beispiel, können Sie einfachi
um zu überprüfen, dassi != 0
und so weiter.Zum Beispiel, wenn Sie überprüfen möchten, dass
a < b
Sie können überprüfen für(a - b) < 0
statt. Umsetzung neben (und damit Subtraktion) mit dem bitweisen Operatoren ist eine bekannte interview-Frage (Sie sollten wirklich versuchen, dies selbst zu tun, es macht Spaß), und prüfen, ob Ihrint
negativ ist, ist so einfach wie das suchen am meisten bedeutende bit.Mag ich nicht zu verderben Ihre Aufgabe, aber Bedenken
for
Zustand wie "Vergleich zu 0'. Dies erfordert nicht eine explizite operator. Ein möglicher Weg, um bekommen es ist so etwas wie dieses:Wenn Sie XOR nicht signierte mit sich selbst, es wird zu 0. So
int count=(1!=1);
könnte geändert werden, umint count = 1 ^ 1
.Als für die Schleife, Bedingung, römische Idee der Vergleich auf 0, scheint, wie die meisten natürlichen Weg zu gehen.