Rumah >pembangunan bahagian belakang >C++ >Mengapakah Sifar Utama dalam Huruf Integer C Kadangkala Menghasilkan Keputusan yang Tidak Dijangka?

Mengapakah Sifar Utama dalam Huruf Integer C Kadangkala Menghasilkan Keputusan yang Tidak Dijangka?

Patricia Arquette
Patricia Arquetteasal
2024-11-26 12:48:091079semak imbas

Why Do Leading Zeros in C   Integer Literals Sometimes Produce Unexpected Results?

Menjelaskan Anomali Berangka dalam C : Kepentingan Sifar Utama

Dalam bidang pengaturcaraan C, kelakuan literal integer yang mengandungi sifar pendahuluan boleh membingungkan kadang-kadang. Mari kita selidiki perkara yang ingin tahu ini dan terangkan mekanik asasnya.

Piawaian C mentakrifkan literal integer sebagai jujukan digit tanpa titik perpuluhan atau eksponen. Membubuhkan awalan literal dengan 0 menandakan nombor perlapanan (asas-8), manakala ketiadaan awalan menunjukkan nombor perpuluhan (asas-10).

Walau bagaimanapun, pertimbangkan coretan kod berikut:

int i = 07; // i == 7
int i = 16; // i == 16
int i = 00016; // i == 14, why?
int i = 05016; // i == 2574, wow )

Dalam contoh pertama, i ditetapkan kepada nilai 7 kerana 07 ditafsirkan sebagai nilai perlapanan (8 * 0 7 = 7). Ini selaras dengan konvensyen C untuk mentafsir sifar pendahuluan tanpa awalan sebagai nombor perlapanan.

Walau bagaimanapun, dalam contoh seterusnya, sifar pendahuluan muncul sebelum digit perpuluhan, yang menimbulkan persoalan. Mengikut piawaian, literal ini tidak boleh diterima sebagai nombor perlapanan. Jadi, apa yang berlaku di sini?

Jawapannya terletak pada pengoptimuman pengkompil yang dikenali sebagai "penindasan oktal". Apabila pengkompil menemui sifar pendahuluan diikuti dengan digit perpuluhan, ia menindas tafsiran oktal dan menganggap literal sebagai perpuluhan. Ini menjelaskan mengapa 00016 dinilai sebagai 14 dan 05016 sebagai 2574.

Sebaliknya, 08 mencetuskan ralat penyusunan kerana ia melanggar peraturan standard bahawa literal perlapanan tidak boleh mengandungi digit 8 atau 9. Pengkompil menjangkakan nombor perlapanan yang sah, tetapi ia mendapati aksara yang tidak sah dan menimbulkan satu ralat.

Atas ialah kandungan terperinci Mengapakah Sifar Utama dalam Huruf Integer C Kadangkala Menghasilkan Keputusan yang Tidak Dijangka?. 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