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

Mengapa Nombor Awalan Sifar Berkelakuan Tidak Dijangka dalam C ?

Barbara Streisand
Lepaskan: 2024-12-07 14:50:17
asal
509 orang telah melayarinya

Why Do Zero-Prefixed Numbers Behave Unexpectedly in C  ?

Memahami Nombor Awalan Sifar dan Kepentingannya

Dalam bidang pengaturcaraan, nombor yang diawali dengan sifar boleh mempamerkan tingkah laku yang menarik. Mari kita mendalami secara khusus menggunakan contoh daripada Visual Studio 2013.

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 )
int i = 08;     // compile error, compiler expects octal number...
Salin selepas log masuk

Layanan Khas Nombor Awalan Sifar

Pengkompil mentafsir nombor awalan sifar secara berbeza bergantung pada konteks:

  • Nombor Perpuluhan (Asas 10): Apabila nombor awalan sifar hanya terdiri daripada digit dari 0 hingga 7, ia ditafsirkan sebagai nombor perpuluhan. Contohnya, 07 bersamaan dengan 7.
  • Nombor Oktal (Asas 8): Jika nombor awalan sifar mengandungi digit 8 atau 9, ia dianggap sebagai nombor perlapanan. Walau bagaimanapun, ambil perhatian bahawa ini adalah penggunaan tidak sah mengikut piawaian C.
  • Nombor Heksadesimal (Asas 16): Nombor awalan sifar yang bermula dengan 0x atau 0X ditafsirkan sebagai nombor perenambelasan.

Gelagat Luar Biasa dengan 00016 dan 05016

Tugasan int i = 00016; menyelesaikan kepada i == 14 kerana pengkompil menganggap sifar pendahuluan sebagai digit perlapanan tambahan, walaupun ini tidak sah mengikut piawai C.

Begitu juga, int i = 05016; menghasilkan i == 2574 kerana pengkompil mentafsirkannya seperti berikut:

  • 050 dianggap sebagai oktal 50.
  • 16 dianggap sebagai perpuluhan 16.
  • Hasilnya dikira sebagai (50 * 8) 16 = 2574.

Ralat Kompilasi dengan 08

Tersurat integer bermula dengan 0 diikuti dengan digit selain daripada 0-7, seperti 08, mencetuskan kompilasi ralat kerana pengkompil menjangkakan ia sebagai nombor perlapanan, tetapi 8 bukan digit perlapanan yang sah.

Atas ialah kandungan terperinci Mengapa Nombor Awalan Sifar 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