Grosse Zahlen in Binaerdarstellung
-
Wegen der eins und wegen der 255 wird alles nach int konvertiert. So macht es jedenfalls mein Compiler, bei mir wird letzteres ausgegeben.
-
Hier kannst du ein oder zwei Sätze zur Konvertierung unter dem Stichwort Konstanten nachlesen. Steht bestimmt auch im Standard, den habe ich aber z.Zt. nicht verfügbar.
http://www.mindrup.de/atos/news/c-kurs-02.html
-
XFame schrieb:
Das Programm gibt bei mir nur ersteres aus:
a-b>255
wenn du willst, dass das ergebnis auch ein 'unsigned char' ist, dann mach's so:
int main() { unsigned char a=10, b=20; unsigned char c = a-b; if (c>255) printf("a-b>255"); if (c<0) printf("a-b<0"); return 0; }
dein code spuckt bei mir übrigens 'a-b<0' aus, also anders als bei dir. kann sein, dass under/overflows von chars undefined sind.
zum konvertieren: chars werden vor der operation zu 'int' erweitert, dann wird mit den ints gerechnet und dann das ergebnis beschnitten (so dass es wieder in einen 'char' passt, wenn es einer 'char' variablen zugewiesen wird).
-
So..
ich habe mich nun damit weiter beschäftigen können und bin gleich wieder auf ein Problem gestoßen.
Ich kann zwar die einzelnen gespeicherten Zahlen mit l+i (i-te position im malloc speicher als char) auslesen, doch wenn ich versuche damit zu rechnen, bekomme ich den Fehler "23 xxx\main.c invalid operands to binary + ".Könnte mir das bitte jemand nochmal erklären ? Danke
-
kanoni schrieb:
Ich kann zwar die einzelnen gespeicherten Zahlen mit l+i (i-te position im malloc speicher als char) auslesen, doch wenn ich versuche damit zu rechnen, bekomme ich den Fehler "23 xxx\main.c invalid operands to binary + ".
da fehlt bestimmt irgendwo ein '*'. du versuchst wohl pointer zu addieren statt des inhalts.
-
Hi,
ok mit * bekomme ich zwar keine Fehlermeldung vom Compiler mehr, aber dafür stürzt das Programm ab
printf("%d,%d,%d\n",*x+*x,(*x+3)+(*x+3),(*x+10)+(*x+10));
habe ich ausprobiert, wobei x von 0..99 gefüllt ist.
-
nun ok .. peinlicher Post zuvor.
Habe es hinbekommen ^^