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.