Rumah >pembangunan bahagian belakang >C++ >Apa yang Berlaku Apabila Anda Menetapkan Nilai Negatif kepada Pembolehubah Tidak Bertanda dalam C?

Apa yang Berlaku Apabila Anda Menetapkan Nilai Negatif kepada Pembolehubah Tidak Bertanda dalam C?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-18 13:18:16633semak imbas

What Happens When You Assign a Negative Value to an Unsigned Variable in C  ?

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!

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