R
Robert Theiß
Guest
Nabend,
eigentlich sollte sich meine Frage an ein C166-Forum richten, aber ich hab
nur ein schlecht besuchtes gefunden.
Ich möchte 2 signed int's miteinander multiplizieren und das ergebnis auf
einem signed long abspeichern.
Dabei kommt immer grober Mist raus
C-code:
signed long a;
a = (-32666*32666);
das ergebnis ist dann -10404
Riecht ein wenig nach einem Overflow was aber eigentlich nich sein sollte,
denn ein signed int hat 15Bits für den Betrag und 1 Vorzeichen-Bit
=>
(1VZ-Bit, 15BetragBits)*(1VZ-Bit, 15BetragBits) = (1VZ-Bit, 30BetragBits)
ein signed long hat 1VZ-Bit und 31BetragBits sollte also kein Stress geben.
Hat wer ne Ahnung was ich da falsch mache? Bei manchen Sachen spinnt auch
der Keil-Compiler aber meistens mach schon ich die Fehler
Ich sag mal danke fürs durchlesen,
Robert
PS: Wenn jemand gute C166-Foren kennt, würde ein Link vielleicht auch
weiterhelfen.
eigentlich sollte sich meine Frage an ein C166-Forum richten, aber ich hab
nur ein schlecht besuchtes gefunden.
Ich möchte 2 signed int's miteinander multiplizieren und das ergebnis auf
einem signed long abspeichern.
Dabei kommt immer grober Mist raus
C-code:
signed long a;
a = (-32666*32666);
das ergebnis ist dann -10404
Riecht ein wenig nach einem Overflow was aber eigentlich nich sein sollte,
denn ein signed int hat 15Bits für den Betrag und 1 Vorzeichen-Bit
=>
(1VZ-Bit, 15BetragBits)*(1VZ-Bit, 15BetragBits) = (1VZ-Bit, 30BetragBits)
ein signed long hat 1VZ-Bit und 31BetragBits sollte also kein Stress geben.
Hat wer ne Ahnung was ich da falsch mache? Bei manchen Sachen spinnt auch
der Keil-Compiler aber meistens mach schon ich die Fehler
Ich sag mal danke fürs durchlesen,
Robert
PS: Wenn jemand gute C166-Foren kennt, würde ein Link vielleicht auch
weiterhelfen.