Rumah >pembangunan bahagian belakang >C++ >Mengapakah Left Shifting Nombor Negatif Tingkah Laku Tidak Ditakrifkan dalam C tetapi Ditakrifkan dalam C ?
Kendalian Anjakan Kiri dan Kelakuan Tidak Ditakrifkan dalam Konteks Operand Negatif
Dalam C, operasi anjakan kiri menggunakan gelagat yang tidak ditentukan apabila operan sebelah kiri negatif . Menurut ISO C99, tingkah laku ditakrifkan dengan baik hanya untuk operan yang ditandatangani bukan negatif. Ini dikaitkan dengan potensi kekaburan dalam mewakili bit yang dikosongkan.
Perbezaan C
Berbeza dengan C, C mentakrifkan gelagat untuk operasi anjakan kiri dengan operan negatif. C -03 menentukan bahawa hasilnya ialah corak bit operan kiri yang dialihkan ke kiri dengan bilangan kedudukan yang ditentukan, dengan bit kosong diisi sifar. Tambahan pula, jika operan kiri tidak ditandatangani, hasilnya ialah operan didarab dengan 2 dinaikkan kepada kuasa kiraan anjakan, modulo dikurangkan pemalar tertentu bergantung pada jenis.
Sebab Kelakuan Tidak Ditakrifkan dalam C
Tingkah laku yang tidak ditentukan dalam C timbul daripada isu cara mengendalikan yang dikosongkan bit. Dalam kes operasi anjakan kiri, bit yang dikosongkan boleh diisi dengan sama ada satu atau sifar, tetapi tingkah laku harus konsisten. Contohnya, dalam ungkapan -1 << 2, jika bit yang dikosongkan diisi dengan satu, hasilnya ialah -4, tetapi jika ia diisi dengan sifar, hasilnya ialah 4026531840.
Kerumitan Operasi Shift Kanan
Sebaliknya, operasi anjakan kanan dengan operan negatif hanya ditentukan pelaksanaan, bukan tidak ditentukan. Ini kerana bit yang dikosongkan diisi dengan bit yang sedang dialih keluar. Dengan perwakilan pelengkap dua, bit tanda dialihkan keluar, dan ia hanya menentukan sama ada hasilnya positif atau negatif. Pelaksanaan mempunyai fleksibiliti untuk memutuskan sama ada untuk mengisi bit kosong dengan sifar atau dengan bit tanda, menjadikan pelaksanaan tingkah laku ditentukan.
Atas ialah kandungan terperinci Mengapakah Left Shifting Nombor Negatif Tingkah Laku Tidak Ditakrifkan dalam C tetapi Ditakrifkan dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!