предупреждение c4307 переполнение интегральной постоянной в C

У меня есть эта операция (8 * (512 * 786432)) и продукт 3221225472

Я пытался использовать его с такими переменными, как longlong, unsigned long

Но компилятор выкинет мне ошибку

c4307 переполнение интегральной постоянной

и мне нужен результат для использования его с функциями, как я могу это исправить? или какие переменные могут работать для больших чисел?

С уважением

5

Решение

Выражение (8 * (512 * 786432)) имеет тип int и он будет переполнен в 32-битных системах. Присвоение его переменной типа long не меняет того факта, что значение имеет уже переполнен. Вы можете исправить это, пометив цифры.

long x = (8L * (512L * 786432L));

Вам нужно только поставить L на одном из чисел, так как это заставит результаты также иметь тип long,

Это предполагает, что long является 64-битным, что верно для большинства систем, но не для Windows. Тебе понадобится LL (или же i64) в Windows.

18

Другие решения

Попробуй использовать

(8 * (512ull * 786432))
6

По вопросам рекламы [email protected]