Страницы

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

вторник, 31 декабря 2019 г.

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

#cpp #visual_studio #integer_overflow


Почему, когда я пишу вот такой код:

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
(посчитайте, насколько меньше знаков). 

Что значит это предупреждение?
    


Ответы

Ответ 1



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

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

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