Dla int a, b
, wiem, że gdy jest dokładnie jeden z a
i b
jest ujemny, wynik a/b
i a % b
jest zależny od komputera. Ale czy zawsze mam (a/b * b) + a % b == a
, gdy b
nie jest zero?Czy zawsze mam `(a/b * b) + a% b == a`, gdy b nie jest zerem?
Odpowiedz
C++ 11 §5.6 [expr.mul]/4 stanowi:
Jeżeli iloraz
a/b
się przedstawić w rodzaju rezultacie(a/b)*b + a%b
jest równaa
.
C11 §6.5.5/6 określa samo z nieco innym frazowania:
Jeżeli iloraz
a/b
się przedstawić wyrażenie(a/b)*b + a%b
równaa
; w przeciwnym razie zachowanie obua/b
ia%b
jest niezdefiniowane.
Należy zauważyć, że klauzula "jeśli iloraz jest reprezentowalny" jest niezbędna. Na przykład, jeśli 'a == INT_MIN' i' b == - 1', równość jest fałszywa (a zachowanie jest niezdefiniowane). –
@R .. - jest to prawdą dla reprezentacji dwóch uzupełnień, ale nie dla wielkości znaku. Nie jestem pewien co do ich uzupełnienia. Wszystkie trzy są poprawnymi reprezentacjami całkowitymi dla C i C++. –
Przepraszam, miałem na myśli, że jest to ogólnie nieprawda, ponieważ dwójka uzupełnień jest możliwa. Jest to również fałszywe w praktyce, ponieważ implementacje uzupełniania i podpisu/magnitudy nie istnieją. –
- 1. Dlaczego (a | b) jest równoważne z - (a & b) + b?
- 2. Rodzaj minBy [B] (f: ((A, B)) ⇒ B) (ukryte CMP: Kolejność [B]): (A, B)
- 3. Różnica między || a = b i a = a || b w rubin?
- 4. Odcinek całkowity: czy // b == int (a/b) jest prawdziwe dla wszystkich liczb całkowitych a, b?
- 5. Czy log (a * b) jest zawsze szybszy w programie Matlab niż log (a) + log (b)?
- 6. Różnica między sort(), sort (funkcja (a, b) {return a-b;}); i sortowanie (funkcja (a, b) {...})
- 7. RegEx dla^b zamiast pow (a, b)
- 8. Różnica między +++++ B i A ++ + ++ b
- 9. W jaki sposób "a <= b && b <= a && a! = B" może być prawdziwe?
- 10. Oracle SQL UNIQUE A do B, B do A
- 11. numexpr.evaluate ("a + b", out = a)
- 12. Redukujące Iterable [Albo [A, B]] na [A, Iterable [B]]
- 13. (Python) Jak uzyskać przekątną (A * B) bez wykonywania A * B?
- 14. Numpy Różnica pomiędzy punktu (a, b) i (a * b) .sum()
- 15. Jak podzielić F [A \/B] do (F [A], M [B])
- 16. Co oznacza b, a jaka jest składnia b + sr + Latn?
- 17. Dlaczego a jest niezdefiniowane, gdy b wynosi 3 w var a = b = 3?
- 18. Jaka jest różnica między "(a b c) a (listą" a "b" c)?
- 19. Czy w wyrażeniu a^= b^= a^= b są punkty sekwencyjne, czy jest niezdefiniowane?
- 20. Dlaczego `a^b` zwraca wartość numeryczną, gdy" a "i" b "są liczbami całkowitymi?
- 21. różnica b/w [ab] i (a | b) w dopasowaniu do wyrażenia regularnego?
- 22. Dlaczego fold left oczekuje (a -> b -> a) zamiast (b -> a -> a)?
- 23. Przypisanie wielokrotne var a = b = b || {} W javascript kod
- 24. Wyrażenia regularne zastępujące {{a, b}} i {{a}}
- 25. Znaczenie podkreślenia w podnośniku [A, B] (f: A => B): Opcja [A] => Opcja [B] = _ mapa f
- 26. Mylące obiekty Pythona: a = b, modyfikuj b i zmiany!
- 27. Dlaczego PHP i oceniać $ b $ b = $ b inaczej, gdy używana z $ b ++ w indeksie tablicy
- 28. char * a, * b; jaki jest typ (b-a) i jak mogę go wydrukować?
- 29. Szyny 3: Jak sprawdzić, czy A <B, gdzie A i B są atrybutami modelu?
- 30. Czy <'a, 'b: 'a> oznacza, że życie "b musi przeżyć całe życie"?
Co masz na myśli przez "zawsze mieć" i jakie typy są a b –
W rzeczywistości, jeśli typ jest typu bez znaku, równość zawsze występuje, gdy "b" jest niezerowe. –