Rumah > pembangunan bahagian belakang > C++ > Apakah Perbezaan Antara Kelakuan Tidak Ditakrifkan dan Ditentukan Pelaksanaan dalam Anjakan Bitwise dalam C dan C ?

Apakah Perbezaan Antara Kelakuan Tidak Ditakrifkan dan Ditentukan Pelaksanaan dalam Anjakan Bitwise dalam C dan C ?

Linda Hamilton
Lepaskan: 2024-12-08 10:36:14
asal
358 orang telah melayarinya

What's the Difference Between Undefined and Implementation-Defined Behavior in Bitwise Shifts in C and C  ?

Tingkah Laku Tidak Ditakrifkan vs. Pelaksanaan dalam Anjakan Bitwise

Pengendali anjakan kiri bitwise (<<) menimbulkan persoalan mengenai kelakuannya dengan operan kiri negatif. Artikel ini meneroka sebab operasi ini menghasilkan gelagat yang tidak ditentukan dalam C tetapi hanya gelagat yang ditentukan pelaksanaan dalam C .

Gelagat Tidak Tertakrif C

Menurut ISO C99, anjakan kiri a operan negatif menghasilkan tingkah laku yang tidak ditentukan. Ini kerana piawaian menentukan bahawa hasilnya hendaklah hasil darab operan kiri dan 2E2, dengan hasil modulo julat jenis hasil. Walau bagaimanapun, apabila operan kiri adalah negatif, pengiraan sedemikian mungkin membawa kepada keputusan yang tidak ditentukan dalam konteks jenis yang ditandatangani.

Gelagat Yang Ditakrifkan dengan Baik C

Berbeza dengan C, C menyatakan bahawa anjakan kiri operan tidak bertanda menghasilkan pendaraban matematik yang dijangkakan. Walau bagaimanapun, untuk jenis yang ditandatangani, C juga mentakrifkan tingkah laku yang tidak ditentukan jika keputusan melebihi julat yang boleh diwakili bagi jenis hasil. Oleh itu, dalam C , operan negatif beralih ke kiri kekal tidak ditentukan.

Sebab Perbezaan

Sebab pendekatan berbeza C mungkin berpunca daripada fakta bahawa ia tingkah laku negatif sudah tidak ditentukan kerana potensi limpahan. Memperluas definisi untuk merangkumi semua kes negatif memudahkan standard dan menjelaskan tingkah laku yang tidak ditentukan.

Tingkah Laku Anjakan Kanan Ditentukan Pelaksanaan

Peralihan ke kanan operan negatif ialah pelaksanaan- ditakrifkan dalam kedua-dua C dan C kerana ia boleh melibatkan pilihan antara sambungan tanda dan pengisian sifar. Sambungan tanda mengekalkan bit tanda asal dalam bit kosong, manakala pengisian sifar menggantikannya dengan sifar. Penyusun dan platform yang berbeza boleh memilih sama ada gelagat, justeru sifat yang ditentukan pelaksanaannya.

Ringkasan

Dalam C, peralihan ke kiri operan negatif tanpa syarat mengakibatkan gelagat tidak ditentukan . Dalam C , operasi sedemikian juga tidak ditentukan untuk jenis yang ditandatangani. Sebaliknya, anjakan kanan operan negatif ditakrifkan pelaksanaan dalam kedua-dua bahasa kerana pilihan antara sambungan tanda dan pengisian sifar.

Atas ialah kandungan terperinci Apakah Perbezaan Antara Kelakuan Tidak Ditakrifkan dan Ditentukan Pelaksanaan dalam Anjakan Bitwise dalam C dan 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