在 C 语言中,printf 函数可以使用不同的 格式说明符(format specifiers) 来打印各种类型的变量。以下是常见变量类型及其对应的 printf 格式说明符:
1. 基本数据类型
(1) 整数类型
| 类型 | printf 格式说明符 | 示例 |
|---|
int | %d 或 %i | printf("%d", 42); |
unsigned int | %u | printf("%u", 42u); |
short | %hd | printf("%hd", (short)42); |
unsigned short | %hu | printf("%hu", (unsigned short)42); |
long | %ld | printf("%ld", 42L); |
unsigned long | %lu | printf("%lu", 42UL); |
long long | %lld | printf("%lld", 42LL); |
unsigned long long | %llu | printf("%llu", 42ULL); |
(2) 浮点数类型
| 类型 | printf 格式说明符 | 示例 |
|---|
float | %f | printf("%f", 3.14f); |
double | %lf 或 %f | printf("%lf", 3.14); |
long double | %Lf | printf("%Lf", 3.14L); |
科学计数法(指数形式):
%e / %E(float/double)
%Le / %LE(long double)
自动选择 %f 或 %e:
(3) 字符类型
| 类型 | printf 格式说明符 | 示例 |
|---|
char | %c | printf("%c", 'A'); |
unsigned char | %c 或 %hhu(转十进制) | printf("%hhu", (unsigned char)'A'); |
signed char | %c 或 %hhd(转十进制) | printf("%hhd", (signed char)-65); |
(4) 字符串
| 类型 | printf 格式说明符 | 示例 |
|---|
char*(字符串) | %s | printf("%s", "Hello"); |
(5) 指针
| 类型 | printf 格式说明符 | 示例 |
|---|
void*(指针地址) | %p | printf("%p", &x); |
2. 特殊格式
(1) 八进制和十六进制
| 格式 | printf 说明符 | 示例 |
|---|
| 八进制 | %o | printf("%o", 10);(输出 12) |
| 十六进制(小写) | %x | printf("%x", 255);(输出 ff) |
| 十六进制(大写) | %X | printf("%X", 255);(输出 FF) |
带 0x 前缀 | %#x 或 %#X | printf("%#x", 255);(输出 0xff) |
(2) 二进制(非标准,需手动实现)
C 标准库没有直接打印二进制的格式说明符,但可以自己实现:
void print_binary(unsigned int num) {
for (int i = 31; i >= 0; i--) {
putchar((num & (1 << i)) ? '1' : '0');
}
}
调用:
unsigned int x = 10;
printf("Binary: ");
print_binary(x); // 输出 00000000000000000000000000001010
(3) 控制输出格式
| 格式 | 说明 | 示例 |
|---|
%5d | 最小宽度 5,右对齐 | printf("%5d", 42); → 42 |
%-5d | 最小宽度 5,左对齐 | printf("%-5d", 42); → 42 |
%05d | 补 0 到 5 位 | printf("%05d", 42); → 00042 |
%.2f | 保留 2 位小数 | printf("%.2f", 3.14159); → 3.14 |
3. 完整示例
#include <stdio.h>
int main() {
int a = 42;
float b = 3.14f;
char c = 'A';
char str[] = "Hello";
int *ptr = &a;
printf("Integer: %d\n", a);
printf("Float: %.2f\n", b);
printf("Char: %c\n", c);
printf("String: %s\n", str);
printf("Pointer: %p\n", (void*)ptr);
printf("Hex: %x\n", a); // 2a
printf("Octal: %o\n", a); // 52
return 0;
}
输出:
Integer: 42
Float: 3.14
Char: A
String: Hello
Pointer: 0x7ffd12345678
Hex: 2a
Octal: 52
总结
| 变量类型 | printf 格式说明符 |
|---|
int | %d / %i |
unsigned int | %u |
long | %ld |
long long | %lld |
float | %f |
double | %lf / %f |
long double | %Lf |
char | %c |
char* | %s |
void* | %p |
| 十六进制 | %x / %X |
| 八进制 | %o |
| 科学计数法 | %e / %E |
如果你需要打印二进制,可以自己实现一个函数(如上面的 print_binary)。