Erklärung einer C funktion
-
Hallo,
Habe eine Frage:Wie funktioniert folgende C Funktion?
void test(unsigned long x[], unsigned long y[], unsigned long sum[]) { unsigned long c, sum0; sum0 = x[0]+y[0]; c = sum0<x[0]; sum[0] = sum0; sum[1] = x[1]+y[1]+c; }
ok, sie erwartet als parameter mal drei unsigned long int arrays (gehe ich richtig der annahme dass unsinged long == unsigned long int ?
dann wird in sum0 die summe von weweils ersten index von x und y gespeichert.
was passiert aber in der nächsten zeile?
also was macht carry = sum0<x[0]?
das < zeichen hat irgendwas mit shift zu tun... kann mir das hier jemand erklären?mfg
-
Addiert zwei Doppelzahlen.
Wenn bei s=x+y ein Überlauf auftrat, dann ist s<x und s<y. Damit wird also das Carry-Bit erzeugt.Haste dazu auch Multiplikation, Division und Modulus?
-
fractile schrieb:
also was macht carry = sum0<x[0]?
es macht
if(sum0<x[0]) carry=1; else carry=0;
-
hallo und danke für die antwort.
kannst du das ein bisschen genauer erklären.
also wieso addiert das zwei doppelzahlen? und was ist eine doppelzahl überhaupt?
-
fractile schrieb:
hallo und danke für die antwort.
kannst du das ein bisschen genauer erklären.
also wieso addiert das zwei doppelzahlen? und was ist eine doppelzahl überhaupt?Mein unsigned long ist mal dezimal und vierstellig.
1232 4576
+
5424 7342sum0=4576+7342
also sum0=1918
beachte, daß die führende 1 im Ergebnis abgeschnitten wurde. Ein Überlauf ist passiert.
Das wird festgestellt mit
if(1918<4576)
c=1;sum[0]=1918
sum[1]=1232+5424+1
also
sum[1]=6657also
1232 4576
+
5424 73426657 1918
-
fractile schrieb:
gehe ich richtig der annahme dass unsinged long == unsigned long int ?
Es kann das gleiche sein, muss es aber nicht. Das ist Systemabhängig.
int ist der Standardtyp auf einem System. Auf 8 und 16-Bit Rechnern ist int i.A 16 Bit groß. long ist 32-Bit.
Es gilt short <= int <= long.
-
DirkB schrieb:
Es gilt short <= int <= long.
und wo/wie gehört hier long int hinein?
-
DirkB schrieb:
fractile schrieb:
gehe ich richtig der annahme dass unsinged long == unsigned long int ?
Es kann das gleiche sein, muss es aber nicht. Das ist Systemabhängig.
int ist der Standardtyp auf einem System. Auf 8 und 16-Bit Rechnern ist int i.A 16 Bit groß. long ist 32-Bit.
Es gilt short <= int <= long.
Richtige Antwort, doch leider auf eine ganz andere Frage.
-
volkard schrieb:
DirkB schrieb:
fractile schrieb:
gehe ich richtig der annahme dass unsinged long == unsigned long int ?
Es kann das gleiche sein, muss es aber nicht. Das ist Systemabhängig.
int ist der Standardtyp auf einem System. Auf 8 und 16-Bit Rechnern ist int i.A 16 Bit groß. long ist 32-Bit.
Es gilt short <= int <= long.
Richtige Antwort, doch leider auf eine ganz andere Frage.
1. so gesehen ist ja immer jede Antwort richtig ...
2. er hat ja auf die Frage geantwortet:DirkB schrieb:
fractile schrieb:
gehe ich richtig der annahme dass unsinged long == unsigned long int ?
Es kann das gleiche sein, muss es aber nicht. Das ist Systemabhängig.
nur ist diese Antwort meiner Meinung nach falsch ...
-
unsigned long ist dasselbe wie unsigned long int. Was DirkB meint ist dass int und long int nicht das gleiche sein müssen (aber können). Es ist also definiert dass long == long int ist, aber nicht in welchem Verhältnis long int zu int steht (es muss nur größer oder gleich sein)