【12】C语言-整数与浮点数的字面量后缀
【12】在C语言中,字面量后缀(Literal Suffixes)用于明确指定数字字面量的具体类型。
| 类型 | 后缀选项 | 默认类型 |
|---|---|---|
| 整型 | u/U, l/L, ll/LL | int |
| 浮点型 | f/F, l/L | double |
一、整型字面量后缀
整型后缀用于指定整数常量的类型,避免隐式转换带来的问题。
| 后缀 | 含义 | 示例 | 适用场景 |
|---|---|---|---|
u | unsigned | 42u | 表示无符号整数 |
U | unsigned | 100U | 同 u,大小写等效 |
l | long | 123456l | 表示长整型(至少32位) |
L | long | 987654L | 同 l,推荐大写避免混淆 |
ll | long long | 999999999ll | 表示长长整型(至少64位) |
LL | long long | 123456789LL | 同 ll,推荐大写 |
ul | unsigned long | 4000000000ul | 无符号长整型 |
UL | unsigned long | 5000000000UL | 同 ul |
ull | unsigned long long | 18446744073709551615ull | 无符号长长整型 |
ULL | unsigned long long | 18446744073709551615ULL | 同 ull |
关键规则:
- 后缀可大小写混用(如
Lu或uL均表示unsigned long)。 - 默认情况下:
- 十进制字面量:
int→long→long long(根据值大小自动选择)。 - 八进制/十六进制字面量:
int→unsigned int→long→unsigned long→long long→unsigned long long。
- 十进制字面量:
二、浮点型字面量后缀
浮点后缀用于指定浮点常量的精度类型。
| 后缀 | 含义 | 示例 | 说明 |
|---|---|---|---|
f | float(单精度) | 3.14f | 强制为 float 类型 |
F | float | 2.718F | 同 f,推荐大写 |
l | long double | 1.414l | 扩展精度(通常80位或128位) |
L | long double | 0.577215L | 同 l,推荐大写 |
| (无) | double(默认) | 3.1415926 | 默认为双精度 double |
关键规则:
- 浮点字面量默认是
double(如3.14)。 - 科学计数法也可加后缀:
1.23e4f // float 类型的 1.23×10⁴ 5.67E-8L // long double 类型的 5.67×10⁻⁸
三、特殊注意事项
-
整型与浮点后缀的区别:
- 整型后缀可组合(如
ull),而浮点后缀只能单独使用(如f或L)。 - 整型后缀影响符号性(
u)和宽度(l/ll),浮点后缀仅影响精度。
- 整型后缀可组合(如
-
类型推断优先级:
- 若未指定后缀,编译器会根据字面量值自动选择能容纳该值的最小类型。
- 例如:
2147483647→int(在32位系统中)2147483648→long(超出int范围)
-
跨平台兼容性:
long的大小可能因平台而异(通常32位或64位)。- 需要精确控制时,优先使用
stdint.h中的类型(如int32_t)配合后缀。
四、代码示例
整型后缀使用
#include <stdio.h>
#include <stdint.h>int main() {unsigned int a = 100u;long long b = 9223372036854775807LL;uint64_t c = 18446744073709551615ULL;printf("a=%u, b=%lld, c=%llu\n", a, b, c);return 0;
}
浮点后缀使用
#include <stdio.h>int main() {float pi_f = 3.14159f;double pi_d = 3.1415926535;long double pi_ld = 3.141592653589793238L;printf("float: %.7f\n", pi_f);printf("double: %.15f\n", pi_d);printf("long double: %.19Lf\n", pi_ld);return 0;
}
