紧接上一篇,贴一下各种数据类型的stdio格式,这东西其实挺麻烦记的
数据类型名称 |
字节数 |
别名 |
stdio基本说明格式 |
int |
* |
signed, signed int |
%d, %i |
unsigned int |
* |
unsigned |
%u, %o, %x, %X |
__int8 |
1 |
char, signed char |
%hhd |
__int16 |
2 |
short, short int, signed short int |
%hd |
__int32 |
4 |
long, long int, signed long int |
%ld, (%I32d) |
__int64 |
8 |
long long, long long int, signed long long int |
%lld, (%I64d) |
bool |
1 |
| |
char |
1 |
signed char, (__int8) |
%hhd, %c |
unsigned char |
1 |
|
%hhu, %hho, %hhx, %hhX |
short |
2 |
short int, signed short int, (__int16) |
%hd |
unsigned short |
2 |
unsigned short int |
%hu, %ho, %hx, %hX |
long |
4 |
long int, signed long int, (__int32) |
%ld, (%I32d) |
unsigned long |
4 |
unsigned long int |
%lu, (%I32u), %lo, %lx, %lX |
long long |
8 |
long long int, signed long long int, (__int64) |
%lld, (%I64d) |
unsigned long long |
8 |
unsigned long long int |
%llu, (%I64u), %llo, %llx, %llX |
enum |
* |
|
|
float |
4 |
无 |
%f, %e, %E, %g, %G |
double |
8 |
无 |
%lf, %le, %lE, %lg, %lG |
long double |
* |
无 |
%llf, %lle, %llE, %llg, %llG |
wchar_t |
2 |
__wchar_t |
|
char[] |
* |
%s | |
void * |
* |
%p |
说明:
1、上述基本类型说明:
(1)、对于整数,d(i)代表有符号,u代表无符号,h和l分别用来进一步说明字长,防止出错,32位和64位整数还提供了I32和I64这样的说明格式;o和x(X)分别是八进制和十六进制输出,x和X只是字母大小写的区别,不过,形如%o%x%X这样的输出是没有前缀的,补充前缀的格式见下文;
(2)、对于浮点数,f是浮点输出,e(E)是科学计数法输出,后者同样是幂符号的大小写区别,l用来增补长度;g(E)则是取f和e(E)中的较短者输出;
2、格式标识
'正整数': 设置输出场宽,当输出实际长度大于设置场宽,则忽略该设置
'-'和'0': 无'-'和'0'时结果右对齐,左端补充空格;设置'-'时结果左对齐,右端补充空格;(对整数,还可以设置'0'表示右对齐,左端补充'0')
'+'和' ': 设置数字符号格式,'+'表示正负号都输出,' '表示只输出符号,不输出正号
'#': 设置几种数字的格式。对o:输出前缀0;对x(X):输出前缀0x(0X);对g(G):输出尾随0(默认是不输出尾随0的);对f:保证输出小数点(即使浮点后没有数字)
3、精度设置
'.正整数': 对f的设置,没有此设置时默认输出6位,注意:有舍入而非截去
总结:格式标志(如果可用)和精度设置(如果可用)插入在百分号和格式说明中间,即(下面用竖杆隔开):
"%|格式标志|精度设置|格式说明"
简单举一个例子:printf("%-12.8lf/n", doubleVar);
测试的时候发现了一些小问题:比如long double的实际精度确实没有想象的那么大
声明: 水平有限,可能有错漏的地方,欢迎批评指正