warnung: integer operation result is out of range



  • Hi,

    bekomm bis jetzt immer eine Warnung angezeigt:

    integer operation result is out of range

    #define BIT_DEF        		(1 << 30)
    
    int main(void)
    {
      unsigned int test=0; 
    
      test = (unsigned int) BIT_DEF;
    
      //usw....
    }
    

    Eigentlich müsste das doch gehen ohne Fehlermeldung... da ein Integer 32Bit beansprucht auf meinem System. Vom Code her funktioniert es auch, aber ohne der Warnung wäre es noch schöner.

    Gruß
    saoirse



  • saoirse schrieb:

    da ein Integer 32Bit beansprucht auf meinem System.

    bist du sicher? welches system ist es? welcher compiler? auf meinen arm-controllern mache ich sowas ständig.
    🙂



  • arbeite auch auf einem 32Bit ARM Controller (zusammen mit der Software Keil).



  • ^^kann es sein, dass beim keil die integers im 'thumb-mode' 16 bits breit sind? das wäre doof. am besten, du liest dir die doku zu deinem compiler durch.
    🙂



  • manche compiler haben sich ein bisschen affig beim shiften von signed int.

    #define BIT_DEF                (1U << 30U)
    

    kommt die warnung so auch?
    Wobei ich die Warnung auch nicht, weder in dem einen, noch in dem anderen Fall nachvollziehen kann.



  • ~fricky schrieb:

    ^^kann es sein, dass beim keil die integers im 'thumb-mode' 16 bits breit sind? das wäre doof. am besten, du liest dir die doku zu deinem compiler durch.
    🙂

    🙂 das könnte das problem sein... im Thumb-Mode gibt es nur maximal 16bits und nur im ARM-Mode stehen 32Bits zur Verfügung. Werd mal in den Configurations nachschauen, kann man bestimmt irgendwo abschalten, so dass man nur die Fehlermeldungen für den ARM-Mode angezeigt bekommt.

    Danke für den Hint! 😉


Anmelden zum Antworten