Mengapa Pergi Mencetak Integer Negatif sebagai \'-ff\' Manakala C Mencetak \'ffffffffffffff\' Apabila Menggunakan \'%x\'?

Susan Sarandon
Lepaskan: 2024-11-18 09:41:02
asal
952 orang telah melayarinya

Why Does Go Print Negative Integers as

Mencetak Integer Heksadesimal Negatif dalam Go lwn. C

Apabila mencetak nilai integer -1 menggunakan penentu format "%x", Go dan C berkelakuan berbeza. Dalam Go, output ialah "-1", manakala dalam C, ia adalah "fffffffffffffff", seperti yang dijangkakan.

Gelagat Go

Go mempertimbangkan "%x " penentu format untuk mewakili nilai nombor dalam tatatanda heksadesimal, tidak kira sama ada ia negatif. Oleh itu, untuk -1, nilai perenambelasan ialah "-ff."

Gelagat C

Sebaliknya, C mencetak perwakilan memori bagi integer menggunakan "%x" penentu. Memandangkan -1 biasanya disimpan dalam bentuk pelengkap 2, perwakilan heksadesimalnya dalam ingatan ialah "fffffffffffffff."

Menyatukan Tingkah Laku dengan Penukaran Jenis

Untuk mencapai tingkah laku seperti C dalam Go, seseorang mesti menukar integer yang ditandatangani secara eksplisit kepada yang setaranya yang tidak ditandatangani sebelum menggunakan penentu format "%x". Contohnya:

i := -1 // type int
fmt.Printf("%x", uint(i)) // prints "fffffffffffffff"
Salin selepas log masuk

Rasional untuk Kelalaian Go

Rob Pike, pembangun Go, menerangkan alasan di sebalik kelakuan lalai Go:

" Mengapa itu bukan format lalai [format yang tidak ditandatangani] kerana jika ya, tidak ada cara untuk mencetak sesuatu sebagai nombor negatif, yang seperti yang anda lihat adalah perwakilan yang lebih pendek."

Atas ialah kandungan terperinci Mengapa Pergi Mencetak Integer Negatif sebagai \'-ff\' Manakala C Mencetak \'ffffffffffffff\' Apabila Menggunakan \'%x\'?. 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