Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Pergi Mencetak Integer Negatif sebagai \"-ff\" Manakala C Mencetak \"ffffffffffffff\" Apabila Menggunakan \"%x\"?

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

Susan Sarandon
Susan Sarandonasal
2024-11-18 09:41:02952semak imbas

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"

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!

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