Rumah >pembangunan bahagian belakang >C++ >Mengapa Awalan Sifar Menukar 0123 kepada 83 dalam 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!