Apakah Penentu Format %ul dan %lu?
Untuk memulakan, adalah penting untuk ambil perhatian bahawa kedua-duanya %ul dan %lu penentu format digunakan apabila pengaturcaraan dalam C dan kedua-duanya mewakili jenis data panjang yang tidak ditandatangani. Walau bagaimanapun, kedudukan huruf “ l ” dan “ dalam ” berbeza. Surat ' dalam ” dan “ l 'berdiri untuk' tidak ditandatangani ” dan “ panjang ,” masing-masing. Jenis hujah yang dimaksudkan ditentukan oleh urutan huruf ini. ' %dalam ” menyatakan bahawa aksara atau rentetan yang digunakan padanya mempunyai jenis data yang tidak ditandatangani int Sementara ' %l ” bahagian menyatakan bahawa ia adalah jenis data panjang yang tidak ditandatangani. Dalam kata lain, %ul menunjukkan jenis data panjang yang tidak ditandatangani manakala %lu menunjukkan yang sama tetapi dengan tambahan “ panjang ” pengubah suai saiz.
Akibatnya, jika anda menggunakan %ul pada pembolehubah yang bukan integer panjang yang tidak ditandatangani, anda boleh mendapatkan akhiran l pada akhir keluaran. Apabila cuba mencetak pembolehubah dengan jenis data tertentu, adalah penting untuk menggunakan penentu format yang sesuai.
Berikut ialah beberapa contoh kod yang menunjukkan caranya %ul dan %lu penentu format berbeza:
%ul Penentu Format dalam C
#includeint utama ( ) {
unsigned long int i = 1234567890 ;
printf ( 'Menggunakan penentu format %%ul: %ul \n ' , i ) ;
kembali 0 ;
}
Dalam kod di atas, kami mentakrifkan pembolehubah i sebagai integer panjang yang tidak ditandatangani dan mulakannya menjadi 1234567890 . The printf arahan kemudian menggunakan %ul penentu format untuk mencetak nilai i . Kerana hanya %dalam ialah komponen utama penentu dan l berada di luar format, ia akan mencetak nombor dengan akhiran l di penghujungnya.
Pengeluaran
%lu Penentu Format dalam C
#includeint utama ( ) {
unsigned long int i = 1234567890 ;
printf ( 'Menggunakan penentu format %%lu: %lu \n ' , i ) ;
kembali 0 ;
}
Dalam kod di atas, pembolehubah integer panjang yang tidak ditandatangani i diisytiharkan dan dimulakan kepada 1234567890 dan kemudian dicetak menggunakan %lu penentu format.
Pengeluaran
Perbezaan Antara Penentu Format %ul dan %lu dalam C
1: Julat Nilai
Perbezaan utama antara %ul dan %lu mempunyai kaitan dengan julat nilai yang dijangka mereka wakili. Apabila pengaturcaraan dalam C, jenis data panjang yang tidak ditandatangani menggunakan format yang berbeza daripada jenis data lain, termasuk jenis data int yang tidak ditandatangani. Int 32-bit memerlukan hanya 32 bit memori untuk menyimpan nilainya, manakala panjang yang tidak ditandatangani memerlukan 64 bit untuk jenis data yang sama, dengan itu mempunyai julat yang lebih ketara daripada int. Ini bermakna bahawa %ul akan menerima nilai dari 0 hingga +2^32-1, manakala %lu penentu akan menerima nilai dari 0 hingga +2^64-1.
2: Ketepatan
Terdapat juga perbezaan dalam ketepatan nilai yang dijangka diwakilinya. Dengan %ul penentu, pengaturcara hanya boleh mewakili nilai sehingga 2^32-1, manakala %lu penentu boleh mewakili nilai sehingga 2^64-1. Walaupun ini mungkin tidak kelihatan seperti perbezaan yang besar pada pandangan pertama, ia secara tidak langsung boleh menjejaskan ketepatan keputusan. Program yang direka untuk menyimpan nilai yang mempunyai, sebagai contoh, julat +2^64 akan mengalami ralat apabila menggunakan %ul penentu kerana mereka tidak akan dapat menyimpan data dalam format yang diingini, sekali gus membawa kepada kehilangan ketepatan.
3: Ingatan
Akhirnya, %ul dan %lu juga berbeza dalam penggunaan ingatan mereka. The %ul specifier memerlukan 32 bit memori untuk data, sedangkan %lu memerlukan 64 bit untuk jenis data yang sama, bermakna itu %lu mengambil kira-kira dua kali lebih banyak ingatan daripada %ul . Ini mungkin tidak kelihatan seperti perbezaan besar dalam program kecil dan berskala rendah, tetapi ini boleh menjadi tidak terurus dengan cepat kerana penggunaan memori program sering meningkat dengan kerumitan, bermakna bahawa %lu tidak sesuai apabila berurusan dengan aplikasi berskala besar.
4: Format
Adalah penting untuk memahami format output yang tepat apabila menggunakan %ul atau %lu . Secara khusus, %ul penentu format sentiasa mengeluarkan integer sebagai nilai heksadesimal 8 digit manakala %lu penentu format mengeluarkan integer sebagai nilai perpuluhan 8 digit. Ini bermakna jika integer diwakili sebagai nilai perenambelasan, ia harus dicetak sebagai a %ul manakala jika integer diwakili sebagai nilai perpuluhan, ia harus dicetak sebagai a %lu .
Fikiran Akhir
Adalah penting untuk memahami perbezaan yang tepat antara %ul dan %lu penentu format apabila bekerja dengan bahasa C. Walaupun mereka mungkin kelihatan serupa, perbezaan utama ialah itu %ul format memerlukan parameter integer panjang yang tidak ditandatangani manakala %lu format mengharapkan input integer yang tidak ditandatangani yang panjang. The %ul penentu format sentiasa mengeluarkan integer sebagai nilai heksadesimal 8 digit manakala %lu penentu format mengeluarkan integer sebagai nilai perpuluhan 8 digit. Akhir sekali, adalah penting untuk diperhatikan bahawa %ul dan %lu penentu format hanya boleh digunakan apabila bekerja dengan pembolehubah yang mempunyai jenis ' panjang '.