Rumah > pembangunan bahagian belakang > C++ > Mengapakah Left Shifting a Negative Number Undefined Gelagat dalam C tetapi Well-Defined dalam C ?

Mengapakah Left Shifting a Negative Number Undefined Gelagat dalam C tetapi Well-Defined dalam C ?

Barbara Streisand
Lepaskan: 2024-12-24 07:27:25
asal
250 orang telah melayarinya

Why is Left Shifting a Negative Number Undefined Behavior in C but Well-Defined in C  ?

Gelagat Tidak Ditakrifkan dalam Operasi Shift Kiri dengan Operand Kiri Negatif dalam C

Dalam C, operasi anjakan kiri bitwise (<< ;) memanggil tingkah laku yang tidak ditentukan apabila operan sebelah kiri mempunyai nilai negatif. Ini dinyatakan dalam ISO C99 (6.5.7/4), yang menunjukkan bahawa hasil peralihan kiri nilai negatif (jenis bertanda) tidak ditentukan.</p><p><strong>Rasional untuk Tingkah Laku Tidak Tertakrif dalam C</strong> </p><p>Standard tidak memberikan sebab yang jelas untuk tingkah laku yang tidak ditentukan ini. Walau bagaimanapun, boleh disimpulkan bahawa ini adalah disebabkan oleh kesukaran dalam mentakrifkan hasil yang konsisten dan boleh diramal untuk nilai negatif peralihan kiri, terutamanya dengan mengambil kira tingkah laku nilai negatif yang bergantung kepada pelaksanaan dalam perwakilan pelengkap dua.</p><p><strong> Gelagat yang Ditakrifkan dengan Baik dalam C </strong></p><p>Berbeza dengan C, operasi anjakan kiri dalam C (ISO C -03 5.8/2) tidak menggunakan tingkah laku yang tidak ditentukan untuk jenis yang ditandatangani jika keputusan boleh diwakili dalam jenis hasil. Perubahan ini dibuat oleh jawatankuasa ISO C untuk memastikan ketekalan dalam kelakuan operasi anjakan kiri tanpa mengira tanda operan.</p><p><strong>Tingkah Laku Ditentukan Pelaksanaan dalam Operasi Anjakan Kanan dengan Operand Kiri Negatif</strong></p><p>Tidak seperti operasi syif kiri, operasi syif kanan (<code >>>) memanggil tingkah laku yang ditentukan pelaksanaan apabila operan kiri adalah negatif. Menurut Piawaian, ini adalah kerana pemotongan bit dari sebelah kiri bergantung pada pelaksanaan untuk nilai negatif dalam perwakilan pelengkap dua.

Kesimpulan

Sebab undefined tingkah laku dalam operasi anjakan kiri dengan operan negatif dalam C dan tingkah laku yang jelas dalam C adalah terutamanya disebabkan oleh kerumitan mentakrifkan hasil yang konsisten untuk negatif nilai. Gelagat pelaksanaan yang ditentukan bagi operasi anjakan kanan pada operan negatif mencerminkan fakta bahawa pemotongan bit dari kiri dalam perwakilan pelengkap dua adalah khusus pelaksanaan.

Atas ialah kandungan terperinci Mengapakah Left Shifting a Negative Number Undefined Gelagat dalam C tetapi Well-Defined dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan