Forum: Compiler & IDEs Verständnisfrage C -> Pascal


von Thomas R. (miparo)


Lesenswert?

Hallo,
ich verstehe leider folgende C Schleife irgenwie nicht;
Ich bleibe bei dem < zwischen den Len's hängen.

// Update number of bits
1
  if ((context->count[0] += ((uint32)inputLen << 3))<((uint32)inputLen << 3))
2
    context->count[1]++;


In Pascal:
1
  if context.count[0] = (context.count[1] + (Len shl 3) ?? (Len shl 3)) then
2
   begin
3
    Inc(context.count[1]);
4
   end;

Danke für Eure Hilfe

von Matthias (Gast)


Lesenswert?

Zähl mal die Klammern richtig ab, dann siehst du es :)


[c]
if
(
(context->count[0] += ((uint32)inputLen << 3))
<
((uint32)inputLen << 3)
)

von Peter (Gast)


Lesenswert?

Sicher bin ich mir nicht.
Es habe es mal kompiliert und es geht ohne warnung - staun.

das < ist wie in pascal ein kleiner als. Das liefert true oder false 
zurück. True müsste dann 1 sein und False 0.

Aber es macht kein sinn. Denn der 1.Teil ist ja immer gleich dem 2.Teil
also könnte man es auch weglassen.

((uint32)inputLen << 3))   <   ((uint32)inputLen << 3))

Bist du dir sicher bei dem Code?

von Peter (Gast)


Lesenswert?

@Matthias
Ah das macht jetzt sinn, das hatte ich auch übersehen.

von Thomas R. (miparo)


Lesenswert?

Danke

Also in Deutsch so:
1
if (context.count[0] + (Longword(Len) shl 3)) < (Longword(Len) shl 3)  then
2
    Inc(context.count[1]);
3
endif;

von Maik F. (sabuty) Benutzerseite


Lesenswert?

Aber das += nicht vergessen!
1
context.count[0] := context.count[0] + (Longword(inputLen) shl 3));
2
if context.count[0] < (Longword(inputLen) shl 3)  then
3
    Inc(context.count[1]);

Keine Garantie, Pascal ist schon ne Weile her.

von Thomas R. (miparo)


Lesenswert?

Danke Maik.
Ist sich jemand sicher ?
Das sind ja zwei Welten zwischen meiner und Maik's Antwort.
Beides lässt sich Compilieren für aber ja zu unterschiedlichen 
Ergebnissen.

Wobei mir Maik's logischer ist.

Ergänzung:

Maiks ist natürlich Richtig, denn = ist ja eine Zuweisung.

Danke allen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.