Pytania otagowane jako integer-overflow

Przepełnienie liczby całkowitej występuje, gdy wynik operacji jest większy niż maksymalna wartość, która może być reprezentowana przez bazowy typ liczby całkowitej.


4
(-2147483648> 0) zwraca true w C ++?
-2147483648 jest najmniejszą liczbą całkowitą dla typu liczb całkowitych z 32 bitami, ale wydaje się, że przepełni się w if(...)zdaniu: if (-2147483648 > 0) std::cout << "true"; else std::cout << "false"; Zostanie to wydrukowane truepodczas moich testów. Jeśli jednak użyjemy -2147483648 na liczbę całkowitą, wynik będzie inny: if (int(-2147483648) > …


5
Dlaczego zachowanie związane z przepełnieniem liczb całkowitych bez znaku jest zdefiniowane, a przepełnienie ze znakiem całkowitym nie?
Niepisane przepełnienie liczb całkowitych jest dobrze zdefiniowane zarówno przez standardy C, jak i C ++. Na przykład stwierdza stan C99 standard ( §6.2.5/9) Obliczenia obejmujące niepodpisane operandy nigdy nie mogą się przepełnić, ponieważ wynik, który nie może być reprezentowany przez wynikowy typ liczb całkowitych bez znaku, jest zmniejszany modulo o …


15
Jak uniknąć przepełnienia w wyrażeniu. A * B - C * D
Muszę obliczyć wyrażenie, które wygląda następująco:, A*B - C*Dgdzie ich typy to: signed long long int A, B, C, D; Każda liczba może być naprawdę duża (nie przepełniać swojego typu). Chociaż A*Bmoże spowodować przepełnienie, w tym samym czasie wyrażenieA*B - C*D może być naprawdę małe. Jak mogę to poprawnie obliczyć? …
161 c++  c  integer-overflow 


6
(A + B + C) ≠ (A + C + B) i zmiana kolejności kompilatora
Dodanie dwóch 32-bitowych liczb całkowitych może spowodować przepełnienie liczb całkowitych: uint64_t u64_z = u32_x + u32_y; Tego przepełnienia można uniknąć, jeśli jedna z 32-bitowych liczb całkowitych jest najpierw rzutowana lub dodawana do 64-bitowej liczby całkowitej. uint64_t u64_z = u32_x + u64_a + u32_y; Jeśli jednak kompilator zdecyduje się zmienić kolejność …


8
Wydajne rzutowanie bez podpisu bez zachowania zdefiniowanego przez implementację
Chcę zdefiniować funkcję, która przyjmuje unsigned intjako argument i zwraca intkongruentny modulo UINT_MAX + 1 do argumentu. Pierwsza próba może wyglądać tak: int unsigned_to_signed(unsigned n) { return static_cast<int>(n); } Jednak, jak wie każdy prawnik zajmujący się językiem, rzutowanie wartości większych niż INT_MAX z unsigned na signed jest zdefiniowane przez implementację. …




12
Wykrywanie podpisanego przepełnienia w C / C ++
Na pierwszy rzut oka to pytanie może wydawać się duplikatem pytania Jak wykryć przepełnienie liczb całkowitych? jednak w rzeczywistości jest znacząco inny. Odkryłam, że podczas wykrywania przepełnienia całkowitą bez znaku jest dość trywialne, wykrywanie podpisane przepełnienie w C / C ++ jest rzeczywiście trudniejsze, niż sądzi większość ludzi. Najbardziej oczywistym, …

5
Java Integer compareTo () - po co używać porównania a odejmowania?
Znalazłem tę java.lang.IntegerimplementacjęcompareTo metody wygląda następująco: public int compareTo(Integer anotherInteger) { int thisVal = this.value; int anotherVal = anotherInteger.value; return (thisVal<anotherVal ? -1 : (thisVal==anotherVal ? 0 : 1)); } Pytanie brzmi, po co używać porównania zamiast odejmowania: return thisVal - anotherVal;

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.