Страницы

Поиск по вопросам

вторник, 18 декабря 2018 г.

Неожиданное переполнение константы там, где его быть не должно

Почему, когда я пишу вот такой код:
size_t VRamSize = 2048 * 1024 * 1024;
то получаю предупреждение "Переполнение константы"?
warning C4307: '*' : integral constant overflow
size_t у меня unsigned long long (самый большой тип), у него диапазон, внимание,
0 to 18,446,744,073,709,551,615
2048 * 1024 * 1024 = 2147483648 (посчитайте, насколько меньше знаков).
Что значит это предупреждение?


Ответ

В процессе самого умножения, вы перемножаете константы типа int, и только потом приводите результат к типу ull. Так что используйте соответствующие суффиксы (не знаю, какие они точно в студии), типа 1024llu
Или можно явно приводить тип сразу size_t(1024)*1024*2048

Комментариев нет:

Отправить комментарий