long
và long int
giống hệt nhau. Vậy là long long
và long long int
. Trong cả hai trường hợp, int
là tùy chọn.
Đối với phần chênh lệch giữa hai bộ, C ++ nhiệm vụ chuẩn dãy tối thiểu cho mỗi, và đó long long
là tại ít nhất rộng như long
.
Các phần điều khiển của tiêu chuẩn (C ++ 11, nhưng điều này đã có từ lâu), đối với một 3.9.1 Fundamental types
, phần 2 (phần sau đưa ra các quy tắc tương tự cho các loại tích phân không dấu):
Có năm loại số nguyên được ký tiêu chuẩn: ký char, short int, int, long int và long long int. Trong danh sách này, mỗi loại cung cấp ít nhất dung lượng lưu trữ như những loại trước nó trong danh sách.
Ngoài ra còn có một bảng 9 7.1.6.2 Simple type specifiers
, trong đó hiển thị "ánh xạ" của các chỉ định đến các loại thực tế (cho thấy rằng đó int
là tùy chọn), một phần trong đó được hiển thị bên dưới:
Specifier(s) Type
------------- -------------
long long int long long int
long long long long int
long int long int
long long int
Lưu ý phân biệt ở đó giữa specifier và loại. Trình xác định là cách bạn nói với trình biên dịch loại đó là gì nhưng bạn có thể sử dụng các trình xác định khác nhau để kết thúc cùng một loại.
Do đó, long
bản thân nó không phải là loại cũng không phải là công cụ sửa đổi như câu hỏi của bạn, nó chỉ đơn giản là một công cụ xác định cho long int
loại. Ditto long long
là một specifier cho các long long int
loại.
Mặc dù bản thân tiêu chuẩn C ++ không chỉ định phạm vi tối thiểu của các loại tích phân, nhưng nó trích dẫn C99 1.2 Normative references
, khi áp dụng. Do đó, phạm vi tối thiểu như quy định trong C99 5.2.4.2.1 Sizes of integer types <limits.h>
được áp dụng.
Về mặt long double
, đó thực sự là một giá trị dấu phẩy động chứ không phải là một số nguyên. Tương tự như các loại tích phân, yêu cầu phải có độ chính xác ít nhất bằng một double
và để cung cấp siêu giá trị cho loại đó (nghĩa là ít nhất là các giá trị đó, không nhất thiết phải có nhiều giá trị hơn ).