If "The integer promotions preserve value including sign." #include <stdio.h>
int main (void) { unsigned short int a; unsigned long long int b, c; a = -1; b = (a*a); c = ((unsigned int)a*(unsigned int)a); printf ("Why %llx != %llx ?\n", b, c); return 0; }