left shift count >= width of type



  • Hallo,

    Das Programm:

    /* Wertebereiche aus limits.h entnommen */
     int min = 0;
     printf("\nWertebereich der Numerischen Datentypen aus limits.h ermitelt\n");
     printf("..........................................................................\n");
     printf("\nChar               = %-20d      - %25d\n" , CHAR_MAX, CHAR_MIN);
     printf("Unsigned Char      = %-20d      - %25d\n" , UCHAR_MAX ,min);
     printf("Signed Char        = %-20d      - %25d\n" , SCHAR_MAX, SCHAR_MIN); 
     printf("Short              = %-20d      - %25d\n" , SHRT_MAX, SHRT_MIN);
     printf("Unsigned Short     = %-20d      - %25d\n" , USHRT_MAX, min);
     printf("Integer            = %-20d      - %25d\n" , INT_MAX, INT_MIN);
     printf("Unsigned Integer   = %-20u      - %25d\n" , UINT_MAX, min);
     printf("Long               = %-20d      - %25d\n" , LONG_MAX, LONG_MIN);
     printf("Unsigned Long      = %-20u      - %25d\n" , ULONG_MAX, min);
     printf("Long Long          = %-20lld      - %25lld\n", LLONG_MAX, LLONG_MIN);
     printf("Unsigned Long Long = %-20llu      - %25d\n", ULLONG_MAX, min);
    
    /* Wertebereiche berechnet */
    
     printf("\nWertebereiche der Numerischen Datentypen durch Berechnung\n");
     printf("Char                =%-20u       - %25d\n",(char)((unsigned char)~0>>1), (char)(1<<7));
     printf("Unsigned Char       =%-20u      -%25d\n", (unsigned char)~0, 0);
     printf("Signed Char         =%-20u      -%25d\n",(unsigned char)~0>>1, (char)(1<<7));
     printf("Short		         =%-20u      -%25d\n",(short)((unsigned short)~0>>1), (short)(1<<15));
     printf("Unsigned Short      =%-20u      -%25d\n",(unsigned short)~0, 0);
     printf("Integer             =%-20u      -%25d\n",(int)((unsigned int)~0>>1), (int)(1<<31));
     printf("Unsigned Integer    =%-20u      -%25d\n",(unsigned int)~0, 0);
     printf("Long                =%-20u      -%25d\n",(long)((unsigned long)~0>>1), (long)(1<<31));
     printf("Unsigned Long       =%-20u      -%25d\n",(unsigned long)~0, 0);
     printf("Long Long           =%-20llu      -%25lld\n",(long long)((unsigned long long)~0>>1), (long long int	)(1<<63));
     printf("Unsigned Long Long  =%-20llu    -%25d\n", (unsigned long long)~0, 0);
     printf("%d\n", sizeof(long long));
    

    In Zeile 29 komme ich nicht weiter, und bekomme eine Compilerwarnung (left shift count >= width of type) und in der Ausgabe kommt eine 0 raus anstatt der
    gewünschten Minimal möglichen größe für ein singned long long int.
    Danke für die Lösung.

    Josef



  • 1 ist vom Typ int
    1U ist vom Typ unsigned int
    1L ist vom Typ long
    1UL ist vom Typ unsigned long
    1ULL ist vom Typ unsigned long long
    ...

    edit: somit ist auch (1<<63) vom Typ int, da ein int aber wohl kleiner 64Bit ist, meckert der Compiler.


Anmelden zum Antworten