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...
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.
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.
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.
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!