Ist unsigned long int für diesen Vorgang korrekt?

Hier ist mein Code:

#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);
}

Es wird x = 18446744071562067968 zurückgegeben. Ich habe gelesen, dass das vorzeichenlose lange int auf 4.294.967.296 steigen sollte. Warum kann ich also nicht 1 << 32 verwenden, um x auf 2.147.483.648 zu setzen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage