Rumah > pembangunan bahagian belakang > C++ > Mengapa Nombor Sifar-Preppended Berkelakuan Tidak Dijangka dalam C ?

Mengapa Nombor Sifar-Preppended Berkelakuan Tidak Dijangka dalam C ?

Linda Hamilton
Lepaskan: 2024-12-02 22:43:12
asal
444 orang telah melayarinya

Why Do Zero-Prepended Numbers Behave Unexpectedly in C  ?

Memahami Gelagat Pelik Nombor Sifar-Preppended

Selalunya diperhatikan bahawa dalam bahasa pengaturcaraan tertentu seperti C , angka yang diawali dengan sifar mempamerkan tingkah laku yang tidak dijangka. Mari kita teliti senario khusus yang anda bentangkan untuk memahami kebiasaan ini.

Pertimbangkan petikan kod berikut:

int i = 07;     // i == 7
int i = 16;     // i == 16
int i = 00016;  // i == 14, why?
int i = 05016;  // i == 2574, wow )
int i = 08;     // compile error, compiler expects octal number...
Salin selepas log masuk

Digit Sifar dan Tafsiran Oktal

Dalam C , literal integer boleh ditentukan dalam asas perpuluhan, perlapanan atau perenambelasan. Integer bertanda sifar biasanya ditafsirkan sebagai literal perlapanan, kecuali apabila literal bermula dengan 0x atau 0X, yang menunjukkan asas perenambelasan.

Dalam contoh anda, 00016 ditafsirkan sebagai literal perlapanan, menghasilkan i == 14. Nombor perlapanan mewakili nilai menggunakan digit 0-7. Sifar pendahuluan tidak menjejaskan nilai literal.

Begitu juga, 05016 juga ditafsirkan sebagai literal oktal, yang boleh ditukar kepada perpuluhan dengan mendarab setiap digit dengan kuasa 8 yang sesuai. Ini memberi kita i == 2574.

Sifar dan Perenambelasan Utama Tafsiran

Walau bagaimanapun, jika literal bermula dengan 0x atau 0X, ia ditafsirkan sebagai literal heksadesimal. Nombor perenambelasan mewakili nilai menggunakan digit 0-9 dan huruf A-F (atau a-f).

Dalam contoh anda, 0x16 akan ditafsirkan sebagai literal perenambelasan yang mewakili nilai 22.

Digit Oktal dan Ralat Sintaks

Mengikut standard C, 8 dan 9 bukan digit perlapanan yang sah. Oleh itu, 08 ialah literal perlapanan yang tidak sah dan mengakibatkan ralat sintaks semasa penyusunan.

Kesimpulan

Keanehan yang anda perhatikan dengan nombor yang diawali sifar berpunca daripada peraturan khusus untuk mentafsir literal integer dalam C . Dengan memahami peraturan ini (iaitu, mentafsirkan integer yang diawali sifar sebagai literal perlapanan melainkan dinyatakan sebaliknya), anda boleh mengelakkan ralat dan mengendalikan nilai integer dengan betul.

Atas ialah kandungan terperinci Mengapa Nombor Sifar-Preppended Berkelakuan Tidak Dijangka dalam 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