Integer ialah struktur data paling asas dalam pengkomputeran—jika kita boleh memanggilnya sebagai "struktur." Tugas kami sebagai pengaturcara adalah untuk memberi makna kepada nombor ini. Tidak kira betapa rumit perisian itu: akhirnya, ia hanyalah integer dan pemproses anda hanya memahami integer.
Jika kami memerlukan nombor negatif, kami mencipta pelengkap dua. Jika kami memerlukan nombor pecahan, kami mencipta sejenis notasi saintifik dan — ledakan — kami mempunyai apungan. Pada penghujung hari, tiada yang lari dari sifar dan satu.
Dalam C, int adalah hampir jenis semula jadi. Walaupun penyusun mungkin mengeluh, dengan beberapa bendera di sana sini, kebanyakannya akan membolehkan anda menulis sesuatu seperti ini:
main(void) { return 0; }
Secara teknikal, ini adalah sama seperti:
int main(void) { return 0; }
Tingkah laku ini datang dari masa yang wajar untuk menganggap bahawa, jika pengaturcara tidak menentukan jenis, adalah munasabah untuk lalai kepada integer.
C telah direka dengan idea ini dalam fikiran. Pada mulanya, int tidak mempunyai saiz standard. Pemproses PDP-11 — mesin yang C pada asalnya dicipta — menggunakan pengalamatan 16-bit. Oleh itu, diandaikan bahawa masuk akal untuk int juga menjadi 16 bit. Ideanya ialah saiz int akan berkembang apabila pemproses berkembang.
Pendekatan ini menimbulkan beberapa masalah. Jika saiz int berbeza antara platform, program yang disusun untuk pemproses yang berbeza boleh berkelakuan berbeza. Ini mematahkan idea C sebagai bahasa "agnostik" yang menyusun kepada seni bina yang pelbagai.
Tidak seperti int, char, sebagai contoh, sentiasa mempunyai saiz yang jelas: 8 bit, ditandatangani. Walaupun namanya, char bukanlah jenis abstrak untuk aksara teks; ia hanya nombor 8-bit. Sebagai contoh, huruf 'a' ditukar pada masa penyusunan kepada nombor 97, biasa dan ringkas.
Dan bagaimana pula dengan jenis lain, seperti pendek dan panjang? Ideanya adalah mudah:
short <= int <= long
Pelaksana pengkompil mempunyai kebebasan sepenuhnya untuk menentukan saiz tertentu.
Dengan piawaian ANSI C, beberapa peraturan telah ditetapkan:
Organisasi ini membantu, tetapi saiz int kekal mengelirukan, sekurang-kurangnya. Perkara dipertingkatkan dengan piawaian C99, yang memperkenalkan pengepala stdint.h.
Kini kami mempunyai jenis saiz tetap:
Bermula dari itu, terpulang kepada pengkompil untuk melaksanakan pengepala ini dengan jenis saiz tetap.
Hari ini, dengan penyusun moden seperti GCC dan Clang, saiz lebih boleh diramal:
Type | Size |
---|---|
char | 8 bits |
short | 16 bits |
int | 32 bits |
long | 64 bits (32 bits on 32-bit systems) |
long long | 64 bits |
Walaupun long long masih agak pelik, sekurang-kurangnya ia membawa sedikit konsistensi (saya pun rasa long long bergaya, sejujurnya).
Hari ini, kami serba lengkap dengan pengepala seperti stddef.h dan stdint.h. Gunakan int hanya jika perlu, seperti untuk jenis pemulangan fungsi utama. Untuk apa-apa selain prototaip, lebih suka menggunakan integer bersaiz tetap daripada stdint.h, dan untuk indeks tatasusunan atau gelung, gunakan size_t daripada stddef.h. Saya harap ini mengelakkan anda sakit kepala di jalan raya.
Terima kasih kerana berjaya sejauh ini — jumpa lagi di lain kali!
Atas ialah kandungan terperinci Integer dalam C: Sedikit Sejarah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!