Rumah >pembangunan bahagian belakang >C++ >Mengapa Awalan Sifar Menukar 0123 kepada 83 dalam C/C ?

Mengapa Awalan Sifar Menukar 0123 kepada 83 dalam C/C ?

Barbara Streisand
Barbara Streisandasal
2024-11-11 12:46:02741semak imbas

Why Does a Prefix Zero Turn 0123 into 83 in C/C  ?

Pemalar Berangka dan Kuasa Mistik Awalan Sifar

Pernahkah anda terfikir apa yang berlaku apabila anda mengawal pemalar berangka dalam C/C dengan sifar? Tidak seperti pemalar perpuluhan yang biasa (cth., 123), nampaknya pengubahsuaian yang kelihatan tidak berbahaya ini menyimpan rahsia tersembunyi.

Untuk menggambarkan kelakuan aneh ini, pertimbangkan contoh dalam soalan asal: memulakan int dengan nilai 0123 . Menariknya, hasil cetakan bukanlah 123 seperti yang dijangkakan tetapi 83 yang tidak dijangka. Apa yang berlaku di bawah tudung yang mengubah nombor perpuluhan ini menjadi sesuatu yang berbeza?

Jawapannya terletak pada dunia pemalar angka yang penuh teka-teki , di mana awalan sifar memegang kuasa purba. Secara lalai, literal angka dalam C/C diandaikan sebagai perpuluhan (asas 10). Walau bagaimanapun, jika anda mengawalnya dengan sifar, ia secara ajaib berubah menjadi pemalar perlapanan, memberi isyarat kepada pengkompil untuk mentafsirnya menggunakan asas 8.

Dalam kes 0123, setiap digit ditafsirkan mengikut sistem perlapanan, menghasilkan pengiraan berikut:

0 = 0
1 = 1
2 = 2
3 = 3

Menggabungkan nilai ini dalam kumpulan tiga orang, kita dapat:

012 = 0 8^2 1 8 2 = 66
3 = 3

Menambah dua nilai ini memberikan kita hasil akhir: 66 3 = 83.

Ini menerangkan tingkah laku tidak dijangka yang diperhatikan dengan awalan sifar. Ini adalah bukti kerumitan rumit C/C , di mana mekanik tersembunyi boleh mendedahkan hasil yang mengejutkan dan sering mengelirukan. Jadi, pada kali berikutnya anda menemui pemalar berangka yang diawali dengan sifar, ingat pintu perlapanan yang dibuka, membolehkan penyusun anda merentasi laluan yang kurang dilalui.

Atas ialah kandungan terperinci Mengapa Awalan Sifar Menukar 0123 kepada 83 dalam C/C ?. 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