Может кто-нибудь объяснить мне следующий код:
void myprint(unsigned long a)
{
printf("Input is %lx\n", a);
}
int main()
{
myprint(1 << 31);
myprint(0x80000000);
}
с gcc main.c
:
Input is ffffffff80000000
Input is 80000000
Почему (1 << 31)
обрабатывается как подписанный, а 0x80000000
обрабатывается как unsigned?