2017-02-09 4 views
0

Ich versuche zu verstehen, wie "signed Integer" und "arithmetische Linksverschiebung" in Swift und iOS funktioniert.signed Integer, arithmetische Verschiebung nach links

In dem Buch, schneller Programmiersprache 3.0, heißt es

enter image description here

ich es mit dem folgenden Code ausprobiert:

enter image description here

ich mit Signed Integer verstehen, Binärdarstellung von -120 ist 10001000, also würde eine Verschiebung nach links zu 00010000 führen, was gleich 16 ist (wie durch den Code gezeigt). Aber 16 ist nicht doppelt von -120

die Aussage des Buches ist falsch, oder? oder gibt es etwas, das mir fehlt?

+2

Das hängt alles davon ab, welche Art von Integer Sie verwenden. Versuchen Sie, 'negative120' in eine Swift Integer anstelle von' Int8' wie 'let negative120: Int = -120' zu ändern, und Sie werden feststellen, dass sich der Wert verdoppelt. – Pierce

Antwort

2

Es tritt ein Integer-Überlauf auf. Der Doubling-Effekt funktioniert nur so lange, wie Platz für alle Bits ist.

Dieses Beispiel würde funktionieren, wenn Sie Int16 verwenden, Int32, Int64 oder Int (die entweder Int32 oder Int64 abbildet, je nach System). Betrachten Sie den Fall Int16.

-120 's binäre Darstellung als Int16 ist 1111 1111 1000 1000. Linke Verschiebung um eins, erhalten wir: 1111 1111 0001 0000. Dies ist die binäre Darstellung für -240, wie Sie erwarten würden. Hier ist der Code dafür:

let a: Int16 = -120 
print(a << 1) 
+0

Vielen Dank für die Erläuterung des Konzepts. Könnten Sie mir bitte sagen, wie ich mit Integer-Überläufen umgehen soll, wenn ich mit Bits arbeite? Die meiste Zeit läuft alles perfekt, aber es gibt gelegentliche Randfälle, deren Ergebnis nicht das ist, was wir erwarten. Danke nochmal für deine Hilfe! – Thor

+0

@TonyStark Nun, es kommt darauf an. Was genau willst du erreichen? – Alexander

+0

Ich denke, ich stelle eine sehr allgemeine Frage. Ich habe keinen bestimmten Zweck im Sinn. Ich möchte nur wissen, wie man mit Integer-Überlauf im Allgemeinen fertig wird, wenn ich sie erfahre. Sorry könnte nicht spezifischer sein – Thor

Verwandte Themen