Является ли unsigned long int правильным для этой операции?
Вот мой код:
#include <stdio.h>
int main(int argc, char *argv[]) {
unsigned long int x = 0;
// trying to make x = 2,147,483,648
x = 1 << 31;
printf("%lu", x);
}
Он возвращает x = 18446744071562067968. Я читал, что unsigned long int должно доходить до 4 294 967 296, так почему я не могу использовать 1 << 32, чтобы установить x равным 2 147 483 648?