Rumah > Artikel > pembangunan bahagian belakang > Mengapakah Penukaran uint64 kepada int64 Menghasilkan -1?
Penukaran uint64 kepada int64 dengan Pemeliharaan Maklumat
Dalam bidang pengaturcaraan, adalah penting untuk mengendalikan jenis data dengan tepat. Pertimbangkan kod berikut:
<code class="go">var x uint64 = 18446744073709551615 var y int64 = int64(x)</code>
Setelah dilaksanakan, nilai y menjadi -1, hasil yang membingungkan kerana ia nampaknya memotong bit penting daripada nombor asal. Untuk menyelesaikan isu ini, mari kita teliti implikasi penukaran ini.
Memelihara Nilai Bit
Bertentangan dengan jangkaan, penukaran melalui int64(x) mengekalkan semua bit daripada x, termasuk 64 bit terkemuka yang berada di luar julat int64. Ia menandakan bahawa y dan x berkongsi corak bit yang sama dalam perwakilan binari mereka:
uint64(18446744073709551615) = 0xFFFFFFFFFFFFFFFF int64(-1) = 0xFFFFFFFFFFFFFFFF
Oleh itu, nilai y, walaupun diwakili sebagai -1, secara matematik adalah bersamaan dengan rakan uint64nya, x.
Contoh untuk Kejelasan
Untuk menggambarkan, mari kita pertimbangkan nombor yang sedikit berbeza:
<code class="go">var x uint64 = 18446744073709551615 - 3</code>
Dalam kes ini, y = -4, mengesahkan bahawa bit yang hilang dalam penukaran diselenggara dengan betul. Dalam binari:
1111111111111111111111111111111111111111111111111111111111111100 (x) -100 (y)
Penukaran hanya mentafsirkan 63 bit pendahuluan sebagai magnitud nombor negatif dan menetapkan bit tanda dengan sewajarnya. Ini membolehkan penukaran tanpa kerugian antara uint64 dan int64 dalam julat tertentu, mengekalkan sifat statistik yang penting untuk penjana nombor rawak.
Atas ialah kandungan terperinci Mengapakah Penukaran uint64 kepada int64 Menghasilkan -1?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!