Menetapkan Nilai Negatif kepada Pembolehubah Tidak Bertanda: Apa Berlaku?
Dalam C , jika anda cuba untuk menetapkan nilai negatif kepada pembolehubah tidak bertanda, seperti:
unsigned int nVal = 0; nVal = -5;
tingkah laku boleh membingungkan.
Penjelasan
Menurut Seksyen 4.7 conv.integral standard C:
"Jika jenis destinasi tidak ditandatangani, hasil nilai ialah integer paling tidak bertanda yang kongruen dengan integer sumber (modulo 2n dengan n ialah bilangan bit yang digunakan untuk mewakili jenis yang tidak ditandatangani)."
Dalam perwakilan pelengkap dua (yang kebanyakan pemproses moden gunakan), ini bermakna tiada perubahan sebenar dalam corak bit jika tiada pemotongan. Hasilnya ialah nilai yang bersamaan dengan (-5 232), atau 4294967291. Ini kerana perwakilan pelengkap kedua-dua bagi -5 adalah sama dengan perwakilan bitwise 4294967291.
Ringkasnya, memberikan nilai negatif kepada pembolehubah yang tidak ditandatangani tidak menyebabkan limpahan atau pengecualian. Sebaliknya, ia dililitkan kepada nilai tak bertanda positif yang setara.
Nota:
Walaupun tingkah laku ini ditakrifkan dengan baik dalam C , ia tidak difahami secara meluas. Adalah penting untuk mengetahui potensi gotcha ini apabila bekerja dengan pembolehubah tidak bertanda.
Atas ialah kandungan terperinci Apa yang Berlaku Apabila Anda Menetapkan Nilai Negatif kepada Pembolehubah Tidak Bertanda dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!