Percanggahan Pencetakan Heksadesimal Antara Go dan C
Dalam bahasa pengaturcaraan Go, mencetak integer 64-bit -1 menggunakan format %x menghasilkan "-1". Walau bagaimanapun, dalam bahasa C, format yang sama akan mengeluarkan "ffffffffffffffff" untuk integer positif. Tingkah laku ini mungkin kelihatan berlawanan dengan intuisi pada mulanya, tetapi ia berpunca daripada perbezaan asas dalam cara Go dan C mengendalikan perwakilan integer.
Dalam Go, kata kerja %x untuk integer mewakili nilai nombor menggunakan perwakilan heksadesimal. Untuk nombor negatif seperti -1, perwakilan heksadesimalnya ialah "-ff". Ini mematuhi konvensyen Go yang sentiasa memformat secara eksplisit berdasarkan jenis. Untuk mencetak integer yang ditandatangani sebagai nilai yang tidak ditandatangani, ia mesti ditukar secara eksplisit.
Sebagai contoh:
i := -1 // type int fmt.Printf("%x", i) // prints "-1" fmt.Printf("%x", uint(i)) // prints "ffffffffffffffff"
Tingkah laku ini memastikan perwakilan yang konsisten merentas jenis yang berbeza.
The alasan di sebalik tingkah laku lalai ini untuk nombor negatif dijelaskan oleh Rob Pike:
"Kerana jika ya, tidak ada cara untuk mencetak sesuatu sebagai nombor negatif, yang seperti yang anda lihat adalah perwakilan yang lebih pendek. "
Ini bermakna Go mengutamakan kepekatan dan kejelasan dalam konvensyen pemformatannya. Walaupun mungkin tidak dijangka untuk menemui nombor perenambelasan yang ditandatangani, ia sejajar dengan penekanan Go pada kejelasan dan keselamatan jenis.
Atas ialah kandungan terperinci Mengapakah Go mencetak -1 sebagai \'-1\' dalam format hex manakala C mencetak \'ffffffffffffffff\'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!