Mengapakah Penukaran uint64 kepada int64 Menghasilkan -1?

Linda Hamilton
Lepaskan: 2024-10-30 11:00:03
asal
133 orang telah melayarinya

 Why Does Converting a uint64 to an int64 Result in -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>
Salin selepas log masuk

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

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

Dalam kes ini, y = -4, mengesahkan bahawa bit yang hilang dalam penukaran diselenggara dengan betul. Dalam binari:

1111111111111111111111111111111111111111111111111111111111111100 (x)
-100 (y)
Salin selepas log masuk

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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!