Запитання з тегом «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) > 0) std::cout << …


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де їх типи: 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; Однак якщо компілятор вирішить змінити …

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як аргумент і повертає до аргументу 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 ++?
Як ми знаємо, переповнення цілим числом із підписом є невизначеною поведінкою . Але в документації C ++ 11 є щось цікаве cstdint: підписаний цілочисельний тип із шириною рівно 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; } Це схоже на просту програму і дає правильний результат на моїй локальній …

12
Виявлення переписаного переповнення в C / C ++
На перший погляд, це питання може здатися дублікатом Як виявити переповнення цілих чисел? , проте насправді це суттєво відрізняється. Я виявив, що виявлення переповнення цілого числа без підпису є досить тривіальним, виявляючи підписане переповнення в C / C ++ насправді складніше, ніж думає більшість людей. Найбільш очевидним, але наївним способом …

5
Java Integer compareTo () - навіщо використовувати порівняння проти віднімання?
Я виявив, що java.lang.Integerреалізація compareToметоду виглядає наступним чином: public int compareTo(Integer anotherInteger) { int thisVal = this.value; int anotherVal = anotherInteger.value; return (thisVal<anotherVal ? -1 : (thisVal==anotherVal ? 0 : 1)); } Питання в тому, чому використовувати порівняння замість віднімання: return thisVal - anotherVal;

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.