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!