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

DDD
Lepaskan: 2024-11-27 06:43:13
asal
738 orang telah melayarinya

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)
Salin selepas log masuk

Output yang terhasil ialah:

18446744073709551615 -1
Salin selepas log masuk

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!
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan