Rumah > pembangunan bahagian belakang > C++ > Integer dalam C: Sedikit Sejarah

Integer dalam C: Sedikit Sejarah

Mary-Kate Olsen
Lepaskan: 2025-01-01 09:12:11
asal
233 orang telah melayarinya

Integers in C: A Bit of History

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.


Sedikit Sejarah Integer

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;
}
Salin selepas log masuk

Secara teknikal, ini adalah sama seperti:

int main(void) {
    return 0;
}
Salin selepas log masuk

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.

Saiz Misteri

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
Salin selepas log masuk

Pelaksana pengkompil mempunyai kebebasan sepenuhnya untuk menentukan saiz tertentu.

ANSI C (1989) Membawa Beberapa Pesanan

Dengan piawaian ANSI C, beberapa peraturan telah ditetapkan:

  • char: sekurang-kurangnya 8 bit
  • pendek: sekurang-kurangnya 16 bit
  • int: saiz pendek atau lebih besar (16 atau 32 bit)
  • panjang: sekurang-kurangnya 32 bit

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:

  • int8_t: 8 bit
  • int16_t: 16 bit
  • int32_t: 32 bit
  • int64_t: 64 bit

Bermula dari itu, terpulang kepada pengkompil untuk melaksanakan pengepala ini dengan jenis saiz tetap.


Keadaan Integer Semasa

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).


Apa yang perlu dilakukan?

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!

sumber:dev.to
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