Rumah >pembangunan bahagian belakang >Golang >Bagaimana Saya Boleh Menukar uint64 kepada int64 dengan Selamat dalam Go, Mengekalkan Perwakilan Binarinya?

Bagaimana Saya Boleh Menukar uint64 kepada int64 dengan Selamat dalam Go, Mengekalkan Perwakilan Binarinya?

DDD
DDDasal
2024-11-27 06:43:13753semak imbas

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

Penukaran Limpahan Int kepada int64

Dalam senario tertentu, terutamanya apabila berurusan dengan fungsi cincang, pembangun mungkin perlu menukar nilai uint64 kepada int64 sambil mengekalkan perwakilan binarinya . Ini kelihatan seperti operasi yang mudah, tetapi boleh mengelirukan kerana potensi limpahan.

Sebagai contoh, fungsi cincang murmur2 menjana hasil uint64. Apabila bekerja dengan PostgreSQL, yang hanya menyokong int64 (64 bit yang ditandatangani), pembangun mungkin menginginkan penukaran jenis yang mengekalkan nilai binari cincang.

Mujurlah, penukaran ini adalah remeh. Hanya gunakan penukaran jenis:

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

Output yang terhasil ialah:

18446744073709551615 -1

Adalah penting untuk ambil perhatian bahawa perwakilan memori kekal sama selepas penukaran; hanya jenis yang diubah.

Walau bagaimanapun, terdapat kaveat apabila menukar pemalar integer yang tidak ditaip kepada int64. Contohnya:

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

Mencuba penukaran ini menghasilkan ralat masa kompilasi kerana nilai 0xffffffffffffffff melebihi nilai int64 maksimum (0x7fffffffffffffffff). Dalam kes sedemikian, pembangun mesti menggunakan jenis uint64 atau mengendalikan penukaran secara eksplisit.

Atas ialah kandungan terperinci Bagaimana Saya Boleh Menukar uint64 kepada int64 dengan Selamat dalam Go, Mengekalkan Perwakilan Binarinya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn