# C 语言的转换说明

## 整数

| 转换说明 | 含义                       | 举例 |
| -------- | -------------------------- | ---- |
| %d       | 以十进制显示整数           |      |
| %o       | 以八进制显示整数           |      |
| %x       | 以十六进制显示整数         |      |
| %u       | 打印 unsigned int 类型的值 |      |

## 浮点数

| 转换说明 | 含义                                          | 举例 |
| -------- | --------------------------------------------- | ---- |
| %f       | 打印十进制记数法的 float 和 double 类型浮点数 |      |
| %e       | 打印指数记数法的 float 和 double 类型浮点数   |      |
| %.2f     | 打印输出的浮点数只显示小数点后两位            |      |

> 可以用十六进制打印浮点数,书中内容有点模糊,没看懂 :(

添加`#` 前缀显示各进制

| 转换说明 | 含义                       | 举例 |
| -------- | -------------------------- | ---- |
| %#o      | 显示前缀 0 八进制的整数    | 0144 |
| %#x      | 显示前缀 0x 十六进制的整数 | 0x64 |
| %#X      | 显示前缀 0X 十六进制的整数 | 0X64 |

添加 `l` 前缀表示 long 类型

| 转换说明 | 含义               | 举例 |
| -------- | ------------------ | ---- |
| %ld      | 打印 long 类型的值 |      |

添加 `h` 前缀表示 short 类型

| 转换说明 | 含义                          | 举例 |
| -------- | ----------------------------- | ---- |
| %hd      | 以十进制显示 short 类型的整数 |      |
| %ho      | 以八进制显示 short 类型的整数 |      |

## 示例代码

```c
#include <stdio.h>

int main(void) {
  int x = 100;
  printf("dec = %d; octal= %o; hex= %x\n",x,x,x);
  printf("dec = %d; octal= %#o; hex= %#x\n",x,x,x);
  printf("dec = %d; octal= %#o; hex= %#X\n",x,x,x);

  printf("----------\n");
  unsigned int un  = 3000000000000;
  short end = 200;
  long big =65537;
  long long varybig = 12345678901234;

  printf("un = %u and not %d\n",un,un);
  printf("end = %hd and %d\n",end,end);
  printf("big = %ld and not %hd\n",big,big);
  printf("verybig = %lld and not %ld\n",varybig,varybig);

  return 0;
}
```

```text
dec = 100; octal= 144; hex= 64
dec = 100; octal= 0144; hex= 0x64
dec = 100; octal= 0144; hex= 0X64
----------
un = 2112827392 and not 2112827392
end = 200 and 200
big = 65537 and not 1
verybig = 12345678901234 and not 12345678901234
```

> C 语言中允许使用大写或小写的常量后缀,但转换说明中只能用小写。

> 基本数据类型由 11 个关键字组成:int、long、short、unsigned、char、float、double、signed、\_Bool、\_Complex 和\_Imaginary。
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9