2015-12-25 11 views
5

Was ist der Unterschied zwischenMitte Wert von zwei ganzen Zahlen

int x = (right + left)/2; 

und

int x = left + (right - left)/2; 

nur ich bekam Frist Ausnahme in ersten Fall und wurde in zweitem Fall angenommen, wenn binären Such tun

+2

gut im ersten Fall können Sie Integer Überlauf haben, wenn rechts und links sind zu groß, deshalb sollten Sie zweite Variante verwenden –

+0

Ok, danke, ich verstehe jetzt. –

+0

@MadiSagimbekov nur einen Rat, versuchen Sie, diese kleinen Fehler selbst zu debuggen, indem Sie die Werte der Variablen bei jeder Iterationen überprüfen. – Daga

Antwort

4

Die Summe Ihres int Variablen

rechts + links (aus ganzen Zahlen begrenzen)

zu groß und übersteigt ganze Zahlen Speichergrenze Aus diesem Grunde ein Überfluss gibt es wegen der Summe, aber wenn man den Unterschied Version verwendet die zweite

links + (rechts - links) (in ganzen Zahlen) limit

es passt der Berechnung und ist für die Maschine.

2

Das int-Limit (gebunden) ist 2,147,483,647.

Ihr right+left Wert liegt außerhalb des Bereichs von int.
Aber left + (right - left)/2 Wert ist weniger als int gebunden, so dass deshalb zweiter Ausdruck funktioniert gut.

Wenn Sie solche großen Zahlen hinzufügen, verwenden Sie long.

Verwandte Themen