Вопросы с тегом «integer-overflow»

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

618
Как обнаружить переполнение кратного числа без знака?

На этот вопрос есть ответы на Stack Overflow на русском : Можно ли на языках C / C ++ определить целочисленное переполнение? Я писал программу на C ++, чтобы найти все решения a b = c , где a , b и c вместе используют все цифры 0-9 ровно один раз. Программа зациклилась на значениях a и b и каждый...

241
(-2147483648> 0) возвращает true в C ++?

-2147483648 - это наименьшее целое число для целочисленного типа с 32 битами, но кажется, что оно будет переполнено в if(...)предложении: if (-2147483648 > 0) std::cout << "true"; else std::cout << "false"; Это напечатает trueв моем тестировании. Однако, если мы приведем -2147483648...

210
Почему целочисленное переполнение без знака определяется поведением, а переполнение со знаком - нет?

Целочисленное переполнение без знака хорошо определяется стандартами C и C ++. Например, стандарт C99 ( §6.2.5/9) гласит Вычисления с использованием беззнаковых операндов никогда не могут переполниться, потому что результат, который не может быть представлен результирующим целочисленным типом без...

192
Неожиданные результаты при работе с очень большими целыми числами на интерпретируемых языках

Я пытаюсь получить сумму 1 + 2 + ... + 1000000000, но я получаю смешные результаты в PHP и Node.js . PHP $sum = 0; for($i = 0; $i <= 1000000000 ; $i++) { $sum += $i; } printf("%s", number_format($sum, 0, "", "")); // 500000000067108992 Node.js var sum = 0; for (i = 0; i <= 1000000000; i++) {...

161
Как избежать переполнения в expr. A * B - C * D

Мне нужно вычислить выражение, которое выглядит следующим образом:, A*B - C*Dгде их типы: signed long long int A, B, C, D; Каждое число может быть очень большим (не выходя за пределы его типа). Хотя A*Bможет вызвать переполнение, в то же время выражение A*B - C*Dможет быть очень маленьким. Как я...

101
Как я могу проверить, не вызовет ли умножение двух чисел в Java переполнение?

Я хочу рассмотреть особый случай, когда умножение двух чисел приводит к переполнению. Код выглядит примерно так: int a = 20; long b = 30; // if a or b are big enough, this result will silently overflow long c = a * b; Это упрощенная версия. В реальной программе aи bнаходятся в другом месте во...

94
Эффективное преобразование без знака в знак, позволяющее избежать поведения, определяемого реализацией

Я хочу определить функцию, которая принимает unsigned intаргумент as и возвращает аргументу, intсовпадающему по модулю UINT_MAX + 1. Первая попытка может выглядеть так: int unsigned_to_signed(unsigned n) { return static_cast<int>(n); } Но, как известно любому юристу по языку, приведение...

86
В какой момент цикла целочисленное переполнение становится неопределенным?

Это пример для иллюстрации моего вопроса, который включает в себя гораздо более сложный код, который я не могу здесь опубликовать. #include <stdio.h> int main() { int a = 0; for (int i = 0; i < 3; i++) { printf("Hello\n"); a = a + 1000000000; } } Эта программа содержит неопределенное...

84
Является ли подписанное целочисленное переполнение неопределенным поведением в C ++?

Как известно, целочисленное переполнение со знаком - это неопределенное поведение . Но в cstdintдокументации по C ++ 11 есть кое-что интересное : целочисленный тип со знаком шириной ровно 8, 16, 32 и 64 бита соответственно без битов заполнения и с использованием дополнения до 2 для отрицательных...

82
Программа странно ведет себя в онлайн-среде IDE

Я наткнулся на следующую программу на C ++ ( источник ): #include <iostream> int main() { for (int i = 0; i < 300; i++) std::cout << i << " " << i * 12345678 << std::endl; } Это выглядит как простая программа и дает правильный вывод на моем локальном компьютере, то...

11
Существует ли фрагмент кода C, который эффективно вычисляет безопасное переполнение без использования встроенных компиляторов?

Вот функция C, которая добавляет intк другому, терпя неудачу, если переполнение произойдет: int safe_add(int *value, int delta) { if (*value >= 0) { if (delta > INT_MAX - *value) { return -1; } } else { if (delta < INT_MIN - *value) { return -1; } } *value += delta; return 0; } К...

10
Значение char, установленное в CHAR_MAX, гарантированно обернуто в CHAR_MIN?

Мой код: #include <stdio.h> #include <limits.h> int main() { char c = CHAR_MAX; c += 1; printf("CHAR_MIN=%d CHAR_MAX=%d c=%d (%c)\n", CHAR_MIN, CHAR_MAX, c, c); } Вывод: CHAR_MIN=-128 CHAR_MAX=127 c=-128 () Мы видим, что когда мы увеличиваем charпеременную, установленную в CHAR_MAX, она...