Назначить большое число беззнаковым int в C

Я пытаюсь присвоить номер unsigned int, но это приводит к ошибке. Я думал, что если число находится между 0 и 2 ^ 32, оно должно работать. Вот мой код.

unsigned int number = 4026658824; 

Однако я получаю эту ошибку.

ошибка: постоянная, соответствующая стандарту ISO ISO 1999

Тип десятичной константы зависит от типа, в котором он может быть представлен, согласно 6.4.4.1 Целочисленные константы :

Тип целочисленной константы является первым из соответствующего списка, в котором может быть представлено его значение.

(См. Таблицу в ссылке о том, как язык C говорит, что выводится фактический тип целочисленных констант).

Обычно подписанный int не может представлять значение 4026658824 . Таким образом, у 4026658824 вероятно, есть тип long int или long long int в вашей системе. Если unsigned int может быть представлено 4026658824 тогда это прекрасно, но ваш компилятор проявляет осторожность.

Вы можете использовать суффикс u или U или передать его в unsigned int . Суффикс u может не работать, если целочисленная константа имеет большее значение. Например, если 17179869184u не может быть представлен unsigned int тогда его тип может быть unsigned long int или unsigned long long int и вы все равно можете получить диагностику об этом.

В дополнение к приведенным выше ответам, если вы хотите, чтобы переменная определенно была определенным количеством битов, используйте целые типы фиксированной ширины . Выполняя встроенную работу, мы должны быть осторожны (CPU может быть только 8 или 16 бит), поэтому почти всегда они используют их для всего.