Keine Checkung bei Bit-Shift
-
Ok, ist klar jetzt, hat sich erledigt.
Das Licht ist aufgegagen
Ein Fall, fast so schwer wie 'The Story Of EOF',
hat sich aber gelohnt, jetzt komm ich wenigstens
mit dieser shifterei klar.MfG
-
pale dog schrieb:
wenn du eine zahl einfach so hinschreibst, ohne type cast oder irgendwelche anhängsel, ist es immer 'int'
Gar nicht.
-
PrOgGiNgMaNiA_ schrieb:
pale dog schrieb:
wenn du eine zahl einfach so hinschreibst, ohne type cast oder irgendwelche anhängsel, ist es immer 'int'
Gar nicht.
wieso nicht?
-
Weil sie möglicherweise nicht in einen int reinpassen könnte
(afair hat ein Ganzzahl-Literal den ersten Typ aus 'int', 'unsigned int', 'long', 'unsigned long', der groß genug ist, um den Wert unterzubringen)
-
d.h. bei einem 'long x = 123456;' wird automatisch 'long' genommen?
...und ich trottel schreib immer ein 'L' hinten dran.
-
Nicht direkt - der Wert 123456 ist idR klein genug, um als int durchzugehen, also hast du da eine int-Konstante (aber die kannst du bedenkenlos deiner long-Variable zuweisen, weil long NIE kleiner ist als int).
-
CStoll schrieb:
Nicht direkt - der Wert 123456 ist idR klein genug, um als int durchzugehen...
denkste. ich progge meistens für 16-bitter
-
Ich wusste gar nicht, das mein Compiler so blöd ist und bei Vergleichen der Art
2147483649 == -2147483647
eine wahre Aussage liefert.
Also das finde ich schon ganz schön heftig.
-
die 2147483649 ist bestimmt zu gross für int und long, so dass es wieder negativ wird...
-
Das geht locker rein, bis UINT_MAX.
Der ist plemplem der Compiler
-
2147483649 passt nicht in einen (signed) int, also wird's vermutlich unsigned, -2147483647 ist ein signed int. Wenn du beide vergleichen willst, müssen sie in den selben Typ umgewandelt werden - und da stimmen die Bitmuster überein.
-
proggingmania schrieb:
Ich wusste gar nicht, das mein Compiler so blöd ist und bei Vergleichen der Art
2147483649 == -2147483647
eine wahre Aussage liefert.
Also das finde ich schon ganz schön heftig.bekommst du eigentlich keine warnungen?
wenn nein - was ist das für'n schrottiger compiler
-
pale dog schrieb:
wenn nein - was ist das für'n schrottiger compiler
MVC 6.0 und MVC 7.1 ebenso wie lcc-Win32 machen keinen Piepser.
Der Dev-C++ der warnt wenigstens, zeigt aber auch Gleichheit an.
-
wir scheinen unterschiedliche msvc6 zu haben. meiner zeigt an: warning C4308: Negative Ganzzahlkonstante in vorzeichenlosen Typ konvertiert
-
Oopsie, es gibt ja so etwas wie eine Warnstufe.
Wenn ich die höchste nehme, dann zeigt er mir das auch an.
-
IAR für ARM sagt:
Warning[Pe068]: integer conversion resulted in a change of sign V:\EWARM_PROJECTS\AV_2_0_TESTBED\src\main.c 571
CW12 sagt:
C4000: Condition always TRUE
keil für ARM sagt
Hello.c(20): warning: #1134-D: literal treated as "long long"
also viele haben was daran auszusetzen
-
IAR ARM CW12 keil
Na du hast ja Exoten auf Lager.
Hardware Progger, nicht wahr.
-
proggingmania schrieb:
Hardware Progger, nicht wahr.
was sonst!
-
Hab' jetzt auch meinen Renesas C- Comp und mein Uralt- Keil- C für 8051 mal mit ein paar Zeilen gefüttert:
Nach rechts shiften führt beim Renesas
- "Nachfüttern" von 1en bei negativen "int"
- "Nachfüttern" von 0en bei "unsigned int" und positiven "int"Eigentlich wie erwartet, macht ja auch Sinn.
Beim Keil werden in beiden Fällen von Links her Nullen nachgestopft.
Fragt sich nur noch, welches Verhalten wirklich ANSI- konform ist.
Weiß das jemand?
Solcher Mist ist wirklich der größte Zeittreiber beim Portieren von Applis ....
-
pointercrash() schrieb:
Fragt sich nur noch, welches Verhalten wirklich ANSI- konform ist.
Weiß das jemand?
das ist beides erlaubt. sie haben's nicht festgelegt...