longdan long intidentik. Begitu juga long longdan long long int. Dalam kedua kasus, intini opsional.
Seperti perbedaan antara dua set, C ++ mandat standar rentang minimum untuk masing-masing, dan itu long longadalah pada setidaknya selebar long.
Bagian pengontrol standar (C ++ 11, tetapi ini sudah ada sejak lama), misalnya 3.9.1 Fundamental types, bagian 2 (bagian selanjutnya memberikan aturan yang sama untuk tipe integral yang tidak ditandatangani):
Ada lima tipe integer bertanda tangan standar: char yang ditandatangani, int pendek, int, int panjang, dan int panjang panjang. Dalam daftar ini, masing-masing jenis menyediakan penyimpanan setidaknya sebanyak yang sebelumnya dalam daftar.
Ada juga tabel 9 dalam 7.1.6.2 Simple type specifiers, yang menunjukkan "pemetaan" dari penspesifikasi untuk tipe aktual (menunjukkan bahwa intitu opsional), bagian yang ditunjukkan di bawah ini:
Specifier(s) Type
------------- -------------
long long int long long int
long long long long int
long int long int
long long int
Perhatikan perbedaan antara specifier dan jenisnya. Specifier adalah bagaimana Anda memberi tahu kompiler apa jenisnya, tetapi Anda dapat menggunakan specifier berbeda untuk berakhir pada tipe yang sama.
Oleh karena itu longsendiri bukan tipe atau pengubah seperti yang diajukan pertanyaan Anda, itu hanyalah penentu untuk long inttipe tersebut. Ditto untuk long longmenjadi specifier untuk long long inttipe tersebut.
Meskipun standar C ++ itu sendiri tidak menentukan rentang minimum tipe integral, ia mengutip C99, dalam 1.2 Normative references, sebagai penerapan. Karenanya rentang minimal yang ditetapkan dalam C99 5.2.4.2.1 Sizes of integer types <limits.h>berlaku.
Dalam hal long double, itu sebenarnya nilai floating point daripada bilangan bulat. Demikian pula untuk tipe integral, itu diperlukan untuk memiliki setidaknya presisi sebanyak doubledan untuk memberikan superset nilai atas tipe itu (berarti setidaknya nilai-nilai itu, belum tentu lebih banyak nilai).