long
dan long int
identik. Begitu juga long long
dan long long int
. Dalam kedua kasus, int
ini opsional.
Seperti perbedaan antara dua set, C ++ mandat standar rentang minimum untuk masing-masing, dan itu long long
adalah 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 int
itu 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 long
sendiri bukan tipe atau pengubah seperti yang diajukan pertanyaan Anda, itu hanyalah penentu untuk long int
tipe tersebut. Ditto untuk long long
menjadi specifier untuk long long int
tipe 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 double
dan untuk memberikan superset nilai atas tipe itu (berarti setidaknya nilai-nilai itu, belum tentu lebih banyak nilai).