首頁 >後端開發 >Golang >如何在 Go 中安全地將 uint64 轉換為 int64,同時保留其二進位表示?

如何在 Go 中安全地將 uint64 轉換為 int64,同時保留其二進位表示?

DDD
DDD原創
2024-11-27 06:43:13807瀏覽

How Can I Safely Convert a uint64 to an int64 in Go, Preserving its Binary Representation?

Int 溢位轉換為int64

在某些情況下,特別是在處理雜湊函數時,開發人員可能需要將uint64 值轉換為int64,同時保留其二進位表示形式。這看起來是一個簡單的操作,但由於潛在的溢出可能會令人困惑。

例如, murmur2 雜湊函數產生 uint64 結果。當使用僅支援 int64(有符號 64 位元)的 PostgreSQL 時,開發人員可能想要進行型別轉換以保留雜湊的二進位值。

幸運的是,這種轉換很簡單。只需使用類型轉換:

i := uint64(0xffffffffffffffff)
i2 := int64(i)

結果輸出為:

18446744073709551615 -1

需要注意的是,轉換後記憶體表示保持不變;僅更改類型。

但是,將無型別整數常數轉換為 int64 時有一個警告。例如:

i3 := int64(0xffffffffffffffff) // Compile time error!

嘗試此轉換會導致編譯時錯誤,因為值 0xffffffffffffffff 超出了最大 int64 值 (0x7ffffffffffffffffff)。在這種情況下,開發人員必須使用 uint64 類型或明確處理轉換。

以上是如何在 Go 中安全地將 uint64 轉換為 int64,同時保留其二進位表示?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn