Konvertieren von uint64 in int64 ohne Datenverlust
Der bereitgestellte Code:
<code class="go">var x uint64 = 18446744073709551615 var y int64 = int64(x)</code>
führt dazu, dass y -1 wird . Dies liegt nicht am Datenverlust, sondern an der Darstellung des maximalen uint64-Wertes in int64. Sowohl 18446744073709551615 als auch -1 stellen denselben Binärwert 0xFFFFFFFFFFFFFFFF dar.
Die geäußerten Bedenken hinsichtlich der Erhaltung statistischer Eigenschaften eines Zufallszahlengenerators sind jedoch berechtigt. In diesem Fall ist die Verwendung eines Encoders und Decoders nicht erforderlich.
So konvertieren Sie uint64 in int64, ohne seine statistischen Eigenschaften zu ändern:
<code class="go">var x uint64 = 18446744073709551615 - 3 var y int64 = int64(x)</code>
Hier wurde x um 3 dekrementiert, was zu y hat den Wert -4. Dieser Vorgang behält die binäre Darstellung der Zahl bei und stellt sicher, dass die statistischen Eigenschaften erhalten bleiben.
Zum Beispiel:
<code class="go">var x uint64 = 18446744073709551615 - 3 var y int64 = int64(x) fmt.Printf("%b\n", x) // Prints: 1111111111111111111111111111111111111111111111111111111111111100 fmt.Printf("%b or %d\n", y, y) // Prints: -100 or -4</code>
Dies zeigt, dass die statistischen Eigenschaften des Zufallszahlengenerators während der Konvertierung erhalten bleiben .
Das obige ist der detaillierte Inhalt vonWie konvertiere ich „uint64' in „int64', ohne statistische Eigenschaften zu verlieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!