Привет!Я экспериментировал с языком Си, пока не столкнулся с чем-то очень странным.Я не смог объяснить себе результат, показанный ниже.
Код:
#include <stdio.h>
int main(void)
{
int num = 4294967295U;
printf("%u\n", num);
return 0;
}
Вопрос:
1.) Как видите, я создал int
, который может содержать числа от -2147483648 до 2147483647 .
2.) Когда я присваиваю значение 4294967295 к этой переменной в среде IDE отображается предупреждение во время компиляции из-за переполнения переменной.
3.) Из-за любопытства я добавил U (без знака) за номером и когда я перекомпилировал его, компилятор не возвратил никакого предупреждающего сообщения.
4. Я провел дополнительные эксперименты, изменив U (без знака) на L (long) и LL (long long) .Как и ожидалось, предупреждающее сообщение все еще сохраняется для этих двух, но не после того, как я изменил его на UL (без знака Long) и ULL (без знака Long Long) .
5.) Почему это происходит?
Предупреждающее сообщение: (для шагов 2)
warning #2073: Overflow in converting constant expression from 'long long int' to 'int'.
Предупреждающее сообщение: (Для шагов 4 LL & L )
warning #2073: Overflow in converting constant expression from 'long long int' to 'long int'.
И наконец, спасибо за чтение моего вопроса, ваши учения и советы очень ценятся.