Keine Checkung bei Bit-Shift



  • 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...
    🙂


Anmelden zum Antworten