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.
Czy nie można ominąć stosu Przepełnienie stosu w : C / C ++. Pisałem program w C ++, aby znaleźć wszystkie rozwiązania z b = c , gdzie , b i c razem wykorzystać wszystkie cyfry 0-9 dokładnie raz. Program zwracane nad wartości i B , i pobiegł rutynowej cyfra …
-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) > …
Jak Java radzi sobie z niedopełnieniami i przepełnieniami liczb całkowitych? W następnej kolejności, jak byś sprawdził / przetestował, że to się dzieje?
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 …
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ć? …
Poniższy blok kodów daje wynik jako 0. public class HelloWorld{ public static void main(String []args){ int product = 1; for (int i = 10; i <= 99; i++) { product *= i; } System.out.println(product); } } Czy ktoś może wyjaśnić, dlaczego tak się dzieje?
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ść …
Chcę zająć się specjalnym przypadkiem, w którym pomnożenie dwóch liczb razem powoduje przepełnienie. Kod wygląda mniej więcej tak: int a = 20; long b = 30; // if a or b are big enough, this result will silently overflow long c = a * b; To uproszczona wersja. W prawdziwym …
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ę. …
To jest przykład ilustrujący moje pytanie, które dotyczy znacznie bardziej skomplikowanego kodu, którego nie mogę tutaj zamieścić. #include <stdio.h> int main() { int a = 0; for (int i = 0; i < 3; i++) { printf("Hello\n"); a = a + 1000000000; } } Ten program zawiera niezdefiniowane zachowanie na …
Jak wiemy, przepełnienie liczb całkowitych ze znakiem jest niezdefiniowanym zachowaniem . Ale w cstdintdokumentacji C ++ 11 jest coś interesującego : typ liczby całkowitej ze znakiem o szerokości odpowiednio 8, 16, 32 i 64 bitów bez wypełniania bitów i przy użyciu dopełnienia 2 dla wartości ujemnych (podany tylko wtedy, gdy …
Natrafiłem na poniższy program w C ++ ( źródło ): #include <iostream> int main() { for (int i = 0; i < 300; i++) std::cout << i << " " << i * 12345678 << std::endl; } Wygląda jak prosty program i podaje prawidłowe dane wyjściowe na mojej lokalnej maszynie, …
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, …
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;
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.