#include <stdio.h>
#include <stdint.h>
int main(){
uint64_t a = 1 << 63;
/* do some thing */
return 0;
}
$ gcc -Wall -Wextra -std=c99 test.c -o test
warning: left shift count >= width of type [-Wshift-count-overflow]
Q: uint64_t
sollte 64 Bits Breite, warum die linke Shift-Operation überläuft?wie man verwendet uint64_t in C
1 ist ein 'int' Literal. Mit '1ULL << 63' statt –
@ LưuVĩnhPhúc C wird '1' als _integer constant_ vom Typ 'int' angegeben. Die einzigen _literals_ in C sind _string literals_ und _compound literals_. "1" ist keiner dieser 2 Literale. – chux
"Warum läuft die linke Schicht?" -> Was zuerst passiert: '1 << 63' oder seine Zuordnung zu' uint64_t a'? Da "1 << 63" zuerst auftritt, ist der Typ, dem er zugeordnet ist, für die Bewertung "1 << 63" irrelevant. – chux