- float → 浮点数
- int → 基本的整数,ISO C 规定取值范围为 -32768 ~ 32767
- signed → 基本整数类型的变式
- char → 字母和其他字符+较小整数,属于整数类型
- float, double, long double → 带小数点的数
- _Bool → 布尔值
- _Complex → 复数
- _Imaginary → 虚数
- %.2f → .2 表示输出的浮点数只显示小数点后两位
- %d → 以十进制显示数字
- %o → 以八进制显示数字(%#o 可以显示前缀)
- %x → 以十六进制显示数字(%#x 或 %#X 可以显示前缀)
- %u → 显示 unsigned int 类型的值
- %ld、%lld → 显示 long 或 long long 类型的值
- %lo、%lx → 以八进制或十六进制显示 long 类型的值
- %hd → 显示 short 类型的值
- %c → 指明待打印的字符
- short int 用于较小数值可以节省空间
- long int 占用存储空间比int多,用于数值较大
- long long int 占用存储空间比long多,用于数值更大,至少占64位
- unsigned int 只用于非负值场合(无符号整型),16位范围为 0~65535
- unsigned long int(无符号整型)
- unsigned short int(无符号整型)
- unsigned long long int(无符号整型)
- 在有符号类型的前面加 signed 可以强调使用有符号类型的意图
int8_t
:-128
-127
int16_t
:-32766
-32767
int32_t
:-2147483646
-2147483647
int64_t
:-9223372036854775807
-9223372036854775807
uint8_t
:0
-128
uint16_t
:0
-65535
uint32_t
:0
-4294967295U
uint64_t
:0
-18446744073709551615
- 另有fast和least类型,详见文章
整数溢出:超出整数类型最大值会导致从起始点开始。
- 类型:float、double、long double
- 必须能表示 6 位有效数字(能够表示 33.333333 的前 6 位,而不是小数点前 6 位)
- 取值范围:10e-37 ~ 10e37
- 通常,系统存储一个浮点数占用 32 位,8位用于表示指数的值和符号,剩下24位表示非指数部分及其符号
- 最小取值范围和 float一致,但至少必须能表示 10 位 有效数字
- 一般情况下占用 64 位,一些系统将多出的32位全部用来表示非指数部分(提高精度),有部分系统分配给指数部分以提高表示数的范围,double类型的值至少有13位有效数字
- 没有后缀的浮点型常量是double类型
- 使用f或F后缀(9.11e9f),编译器会将浮点型常量看作float类型
- 使用l或L后缀(9.11e9L),编译器会将浮点型常量看作long double类型
十六进制数前加上0x,用p代替e,用2的幂代替10的幂(p计数法)
例如: 0xa.1fp10(十六进制a等于十进制10),.1f 是 1/16 加上 15/256(十六进制f等于十进制15),p10是$2^{10}$或1024,表示值位$(10 + \frac{1}{16} + \frac{15}{256}) * 1024$(等于十进制10364.0)
-
%f → 打印十进制计数法的float和double类型
-
%e → 打印指数计数法浮点数
-
%a → 打印十六进制格式浮点数(需系统支持
-
%Lf %Le %La 表示各类long double类型
-
尽量避免 long double 使用 double 输出,会导致降低精度
e.g. 一个类型为float的数(2.0e20)加上1,再减去原来的数(2.0e20),结果并不是1
原因:float类型的数字通常只能存储按指数比例缩小或放大的 6 或 7 位有效数字,若这个数为 2.0e4,计算则没有问题。