Является ли 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?

Ответы на вопрос(1)

Ваш ответ на вопрос