Heim >Backend-Entwicklung >Golang >Warum kommt es bei der Verwendung bitweiser Operationen zu einem ständigen Überlauf von Go?
Im Bereich der Go-Programmierung stellt sich eine häufige Frage: „Warum läuft meine Konstante über, wenn die Benutzer-ID := 12345 ist? and did := (userid &^(0xFFFF
Beim Kompilieren eines solchen Codes tritt der gefürchtete Fehler auf: „constant -18446462598732840961 overflows int.“ Aber was verbirgt sich hinter dieser irreführenden Botschaft?
Der Schuldige hinter diesem Leid ist die untypisierte Natur der Konstante ^(0xFFFF
0xffff
Jetzt erbt die Variable userid, initialisiert mit dem Wert 12345, den Typ int. Wenn die bitweise UND-Operation (&) ausgeführt wird, geht der Compiler davon aus, dass die untypisierte Konstante auf den Typ int herabgestuft werden sollte. Diese Annahme führt zu einem Konflikt, da die Größe der Konstante den für int zulässigen Maximalwert überschreitet.
Um dieses Problem zu lösen, nutzen Sie die Macht der Typumwandlung . Wenn Sie beabsichtigen, die Konstante 0x0000ffffffffffff zuzuweisen, sollten Sie die Verwendung von 1
Für echte Portabilität sollten Sie lieber int meiden von int64, wodurch der Umfang Ihres Codes erweitert wird, um sowohl 32-Bit- als auch 64-Bit-Architekturen zu unterstützen.
Das obige ist der detaillierte Inhalt vonWarum kommt es bei der Verwendung bitweiser Operationen zu einem ständigen Überlauf von Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!