Rumah > Artikel > pembangunan bahagian belakang > Apa yang Berlaku Apabila Anda Menganjak Kanan Integer Tidak Bertanda dengan Kiraan Anjakan Melebihi Lebarnya?
Gelagat Anjakan Kanan dengan Kiraan Melebihi
Persoalan timbul berkenaan kelakuan operasi anjakan kanan dalam C apabila kiraan anjakan melebihi lebar daripada jenis data. Menurut piawaian C, peralihan ke kanan nilai yang tidak ditandatangani dengan kiraan bukan negatif harus menghasilkan hasil bahagi kamiran bagi nilai asal dibahagikan dengan 2^E2. Walau bagaimanapun, pengguna memerhatikan gelagat yang tidak dijangka dengan GCC pada platform Intel.
Isu ini berpunca daripada fakta bahawa piawaian C menyatakan tingkah laku itu tidak ditentukan jika operan yang betul (kiraan anjakan) lebih besar daripada atau sama dengan lebar operan kiri yang dipromosikan (nilai data sedang dianjak). Dalam kes ini, memandangkan int yang tidak ditandatangani biasanya 32 bit atau kurang, kiraan anjakan 34 dianggap sebagai gelagat tidak ditentukan.
Amaran GCC "kiraan anjakan kanan >= lebar jenis" menunjukkan gelagat yang tidak ditentukan ini. Nilai terhasil 67108863 yang diperhatikan dalam kod pemasangan juga menyokong ini. Oleh itu, isunya bukan terletak pada pelaksanaan piawaian GCC tetapi pada tingkah laku yang tidak ditentukan yang disebabkan oleh melebihi lebar jenis data dalam operasi anjakan.
Atas ialah kandungan terperinci Apa yang Berlaku Apabila Anda Menganjak Kanan Integer Tidak Bertanda dengan Kiraan Anjakan Melebihi Lebarnya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!