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
Lepaskan: 2024-11-26 12:48:09
asal
1034 orang telah melayarinya

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 )
Salin selepas log masuk

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!

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