Rumah >pembangunan bahagian belakang >C++ >Adakah Peralihan Kiri Bilangan Negatif Kelakuan Tidak Ditakrifkan dalam C tetapi Ditakrifkan dengan Baik dalam C?

Adakah Peralihan Kiri Bilangan Negatif Kelakuan Tidak Ditakrifkan dalam C tetapi Ditakrifkan dengan Baik dalam C?

Barbara Streisand
Barbara Streisandasal
2024-12-24 20:13:171007semak imbas

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

Gelagat Tidak Ditakrifkan: Shift Kiri dengan Operand Kiri Negatif

Menurut piawaian ISO C99, operasi anjakan kiri bitwise (<< ) memanggil Tingkah Laku Tidak Tertakrif apabila operan kiri mempunyai nilai negatif. Ini kerana piawaian memberi mandat bahawa jika operan kiri mempunyai jenis bertanda dan nilai bukan negatif, hasilnya ialah hasil darab operan kiri dan 2 kepada kuasa amaun anjakan, modulo dikurangkan satu lebih daripada nilai maksimum yang boleh diwakili dalam jenis hasil. Jika tidak, tingkah laku itu tidak ditentukan.

Gelagat Yang Ditakrifkan dengan Baik dalam C

Berbeza dengan C, C memastikan tingkah laku yang jelas untuk operasi syif kiri dengan operan kiri negatif . Piawaian ISO C -03 menentukan bahawa hasilnya ialah operan kiri didarab dengan 2 dinaikkan kepada kuasa amaun anjakan, mengurangkan modulo nilai maksimum yang boleh diwakili tambah satu. Tingkah laku yang ditakrifkan dengan baik ini membolehkan hasil yang boleh diramal walaupun apabila mengubah nilai negatif.

Justifikasi untuk Tingkah Laku yang Ditakrifkan dengan Baik C

Keputusan jawatankuasa ISO C untuk menentukan tingkah laku untuk anjakan kiri dengan operan kiri negatif mungkin didorong oleh keinginan untuk hasil yang boleh diramal dalam pelbagai senario, termasuk manipulasi bit dan aritmetik integer.

Anjakan Kanan Ditakrifkan Pelaksanaan dengan Operand Kiri Negatif

Operasi anjakan kanan bitwise (>>) dengan operan kiri negatif ditakrifkan pelaksanaan . Ini bermakna bahawa tingkah laku tidak ditentukan oleh standard dan diserahkan kepada budi bicara pelaksana pengkompil. Ia biasanya bergantung pada platform sasaran dan pelaksanaan pengkompil khusus.

Atas ialah kandungan terperinci Adakah Peralihan Kiri Bilangan Negatif Kelakuan Tidak Ditakrifkan dalam C tetapi Ditakrifkan dengan Baik 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