2017-02-14 1 views

Antwort

3

Nun, für einige Werte gibt es ein Problem: I. e. für a=0 und b größer als der maximale Wert von int64_t+1 werden Sie einen Überlauf haben. Ich weiß nicht, ob deine realen Werte so sein können.

Allerdings können Sie es viel einfacher:

a>b?a-b:b-a 
+0

Ja die Abhilfen nicht das Problem sind, ich habe mich nur gefragt, ob das richtig funktionieren würde. Ich bin mit unsignierten Ints etwas nicht vertraut. Eine Erklärung, warum das Überlaufen wäre, würde geschätzt, wenn Sie die Zeit haben! – ge0rges

+1

Zuallererst, wenn b> a, wird die Subtraktion ein negatives Ergebnis haben. Dies ist ein Problem, da vorzeichenlose Ganzzahlen keinen negativen Wert enthalten können. (Dies führt dazu, dass sie unsigniert werden.) Allerdings gibt es einige Regeln für das Verhalten von unsignierten Überläufen und das Umwandeln in vorzeichenbehaftete Werte, wie Sie es taten. Und da es üblich ist, die 2. Ergänzung zu verwenden, wird es in der realen Welt funktionieren. Der negative Bereich vorzeichenbehafteter Ganzzahlen ist jedoch die Hälfte des Bereichs vorzeichenloser Ganzzahlen. Daher können Sie ein negatives Ergebnis erzeugen, das von einer vorzeichenbehafteten Ganzzahl nicht gehalten werden kann. –

+1

Lassen Sie uns ein Beispiel für eine 3-Bit-Ganzzahl haben. Vorzeichenlose Werte haben den Bereich von 0 ... 7. Vorzeichenbehaftete Ganzzahlen haben den Bereich von + 3 ... -4. Es ist klar, dass die vorzeichenlose Subtraktion einen Wert erzeugen kann, der außerhalb des Bereichs der vorzeichenbehafteten Ganzzahl liegt. –

Verwandte Themen