赞
踩
粗体表示C90
斜体表示C99
粗体加斜体表示C11
auto | extern | short | while |
---|---|---|---|
break | float | signed | _Alignas |
case | for | sizeof | _Alignof |
char | goto | static | _Bool |
const | if | struct | _Complex |
continue | inline | switch | _Generic |
default | int | typedef | _Imaginary |
do | long | union | _Noreturn |
double | register | unsigned | _Static_assert |
else | restrict | void | #_Thread_local |
enum | return | volatile |
K&R | ANSI / C90 | C99 |
---|---|---|
int | signed | _Bool |
long | void | _Complex |
short | _Imaginary | |
unsigned | ||
char | ||
float | ||
double |
直译应该是转换说明符
输出格式符 ANSI C | 数据类型 |
---|---|
%e %E | 浮点数科学计数法表示,如1e10 1E10 |
%f | 浮点数十进制表示 |
%g %G | 浮点数如果指数部分大于4或者小于-4,则使用%e表示,否则使用%f表示 |
%d %i | 有符号十进制整数 |
%u | 无符号十进制整数 |
%o | 无符号八进制整数 |
%x %X | 无符号十六进制整数 |
%p | 指针的十六进制地址 |
%a %A | (C99/C11)表示十六进制浮点数,10.0输出0x1.4p+3 查看更多 |
%c | 单个字符 |
%s | 字符串 |
%% | 打印字符% |
输出格式符修饰符 | 意义 |
---|---|
* | 类似于digits的功能,使用的时候需要搭配参数 查看更多 |
+ | 非负数带正号,负数带负号 |
- | 在定义了域宽时使输出左对齐 |
空格 | 非负数带空格,负数带负号 |
# | %#o显示八进制数前缀0 %#x显示十六进制前缀0x 浮点数显示小数点 %#g显示小数点后的0 如0.1->0.100000 0.00001->1.00000e-05 |
0 | 定义了域宽时填充0 若已经有负号的flag修饰符或给整数定义了精度则会被忽略 |
digit(s) | 最小域宽,如%3d,12输出则为_12 (这里用_表示1个空格) |
.digit(s) | 精度,对于%e和%E表示小数点后数字的个数 对于%g和%G表示符号位的最大位数 对于%s表示打印字符的个数 对于整数表示最少出现的数字,不足则补0 只使用 . 时默认 . 之后为0,如 .f 表示 .0f |
L | 修饰浮点数格式符,指定输出一个long double浮点数 |
h | 修饰整数格式符,指定输出一个short或unsigned short整数 |
hh | 修饰整数格式符,指定输出一个char或unsigned char整数 |
l | 修饰整数格式符,指定输出一个long int或unsigned long int整数 |
ll | (C99)修饰整数格式符,指定输出一个long long int或unsigned long long int整数 |
j | 修饰整数格式符,指定输出intmax_t或uintmax_t类型的整数,这些类型定义在stdint.h中 |
t | (C99)修饰整数格式符,指定输出一个ptrdiff_t类型的整数,这个类型用于对比两个指针的不同 |
z | (C99)修饰整数格式符,指定输出一个size_t整数,这个类型由sizeof返回 |
输入格式符与输出格式符不同的就是浮点数
float类型使用%f %e %E %g %G %a %A
double类型需要加上格式符修饰符 l (L小写)除此之外需要注意的是字符串格式符%s,scanf会读取第一个非空字符到下一个非空字符之间的所有字符
输入格式符修饰符 | 意义 |
---|---|
* | 抑制分配,或者说跳过该输入项 查看更多 |
digit(s) | 最大域宽,在达到最大域宽或遇到空白符时停止输入 |
hh | 读取一个char或unsigned char 如%hhd、%hhu |
ll | 读取一个long long或unsigned long long 如%lld、%llu |
h l L | %hd和%hi表示读取一个short int %ho、%hx和%hu表示读取一个unsigned short int %ld和%li表示读取一个long %lo、%lx和%lu表示读取一个unsigned long %le、%lf和%lg表示读取一个double %Le、%Lf和%Lg表示读取一个long double 如果没有使用这些修饰符%d %i %o %x表示int,%e、%f和%g表示float |
j | (C99)当修饰一个整数格式符时表示使用intmax_t或uintmax_t类型 |
z | (C99)当修饰一个整数格式符时表示使用sizeof的返回类型 |
t | (C99)当修饰一个整数格式符时表示使用ptrdiff_t类型 |
C语言中各种数据类型是由各种关键字组合而成
在学习时只需要理解基础类型,其他的也就很容易理解
比如整型int,衍生出short int, long int, long long int, unsigned short int, unsigned int, unsigned long int, unsigned long long int
归根结底计算机底层只有两种类型:整型和实型
之所以会有这么多的类型,一方面是取值范围不同(int 和 long),一方面是功能需要(char、_Bool等)
对于一个二进制值01001100,使用%d可以输出76,使用%x可以输出4c,使用%c可以输出‘L’
你我可以将其理解为翻译/解释符,%c意味着将数值翻译/解释成一个字符,printf就会在对应的内存空间中读取一个字节的数据
double有%f %e,long double有%Lf %Le,而float没有
这是历史缘故,在K&R C时,float数据在被使用之前,不管是在表达式或者是作为实参,都会被自动转换成double类型
尽管ANSI C之后没有不再要求进行自动转换,为了不改动大量已有代码,这一功能被保留下来,因此,没有必要为float加一个格式转换符
而这衍生出一个问题:就是float和double的速度谁比较快?
直观而言,float需要经过一次转换才能进行计算,最后还要转换回float,而double直接参与计算,看起来是double比较快
实际上,这没有确切的答案。在有些机器上有专门的硬件处理浮点运算,有的可以直接计算float,double需要转换,有的则是可以直接计算double,float需要转换,在图形运算中进行矢量运算时,float比double快
对于printf,它用于指定域宽或精度,需要搭配参数来使用,如
float val = 242.5;
unsigned int width = 8, precision = 3;
printf("_%*.*f_", width, precision, val);
//输出_ 242.500_
对于scanf,它用于跳过输入项,例如
int n;
scanf("%*d %*d %d", &n);
//输入2020 2021 2022后,n=2022
空白符指的是空格、tab、换行符
scanf的第一个参数,字符串,这里称之为格式字符串
格式字符串中的空白符表示跳过下一个输入项前的任何空白符,也可以没有空白符
如scanf(“%d ,%d”, &n, &m)可接收的输入为
对于%c也会生效
关于sizeof返回值的类型,C的标准只要求其是一个无符号整数,这就意味着在不同的系统上,你可能需要使用不同的格式符%u %lu %llu
为了代码的可移植性,C在stddef.h(stdio.h已经include了它)中提供了size_t类型,对应你系统sizeof使用的类型,是一种底层类型underlying type,由typedef关键字实现,与机器相关,而使用z修饰符时printf会根据对应的类型打印出来。
ptrdiff_t类型也是一种底层类型。
十六进制的浮点数,比 十进制浮点数表示法 能更加精确地表示 二进制浮点数(计算机实际存放的数据格式),下面是例子:
0x1.999999999999ap-4是一个最近似于十进制数0.1的十六进制双精度浮点数
它由4个部分组成
将其展开为二进制浮点数,则是
1.100110011001100110011001100110011001100110011001101 x 2^-4
《C Primer Plus 6th》英文版
博客: 关于十六进制浮点数的描述 – 英文
本文将C语言中的关键字、数据类型关键字、输入输出格式符、格式符修饰符列表整理在一起,方便查阅,同时增加了一些补充方便理解
文章暂且到这里,之后有需要再补充,也欢迎各位指正
文章内容主要是翻译而来,CSDN博客选择翻译类型要求获得原作者授权,我上哪去找Stephen Prata,这不是刁难我胖虎吗/震怒
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。