Đây là các hằng số trong C và C++. Hậu tố LL
có nghĩa là hằng số thuộc loại long long
và UL
có nghĩa là unsigned long
.
Nói chung, mỗi L
hoặc l
đại diện cho một long
và mỗi U
hoặc u
đại diện cho một unsigned
. Vì vậy, ví dụ:
1uLL
là hằng số 1 có loại unsigned long long
.
này cũng áp dụng cho số dấu chấm động:
1.0f // of type 'float'
1.0 // of type 'double'
1.0L // of type 'long double'
và chuỗi và ký tự, nhưng họ là các tiền tố:
'A' // of type 'char'
L'A' // of type 'wchar_t'
u'A' // of type 'char16_t' (C++0x only)
U'A' // of type 'char32_t' (C++0x only)
Trong C và C++ các hằng số nguyên được đánh giá sử dụng của họ loại gốc, có thể gây ra lỗi do tràn số nguyên:
long long nanosec_wrong = 1000000000 * 600;
//^you'll get '-1295421440' since the constants are of type 'int'
// which is usually only 32-bit long, not big enough to hold the result.
long long nanosec_correct = 1000000000LL * 600
//^you'll correctly get '600000000000' with this
int secs = 600;
long long nanosec_2 = 1000000000LL * secs;
//^use the '1000000000LL' to ensure the multiplication is done as 'long long's.
Trong Google Go, tất cả các số nguyên được đánh giá là số nguyên lớn (không bị cắt xén sẽ xảy ra),
var nanosec_correct int64 = 1000000000 * 600
và không có "usual arithmetic promotion"
var b int32 = 600
var a int64 = 1000000000 * b
//^cannot use 1000000000 * b (type int32) as type int64 in assignment
nên hậu tố không cần thiết.
"Tôi đã cố gắng để thực hiện tìm kiếm Google" ... cố gắng tìm kiếm term 'integer constants C++ LL'. :) –
Tôi luôn luôn nghĩ về những thứ như 'literals' và hằng số như các biến được khai báo là hằng số. –
Công bằng đủ, nhưng tôi tưởng tượng kết quả cho 'số nguyên literals C++ LL' là tương tự ... :) –