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

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

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

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


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

30
Неожиданные результаты при работе с очень большими целыми числами на интерпретируемых языках
Я пытаюсь получить сумму 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; …

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


6
(A + B + C) ≠ (A + C + B) и переупорядочение компилятора
Добавление двух 32-битных целых чисел может привести к целочисленному переполнению: uint64_t u64_z = u32_x + u32_y; Этого переполнения можно избежать, если сначала преобразовать одно из 32-битных целых чисел или добавить к 64-битному целому числу. uint64_t u64_z = u32_x + u64_a + u32_y; Однако, если компилятор решит изменить порядок добавления: uint64_t …

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

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

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

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

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

4
Существует ли фрагмент кода 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; …

1
Значение 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, она оборачивается в CHAR_MIN. Это поведение гарантировано? Или это будет …
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.