C Primer Plus
常量(constant)
变量(variable)
数据类型
通过一下关键字创建的类型,按照计算机的存储方式分为两大基本类型:整数和浮点数。
int
基本整数类型
%d格式化输出整型,%5d格式化成5位输出。
%o八进制显示,%#o带八进制前缀显示。
%x十六进制显示,%#x、%#X带十六进制前缀显示。
- 整数溢出,溢出是为定义的行为,C标准并未定义有符号类型的溢出规则。
可移植整数类型stdint.h和inttypes.h
1.C语言为现有类型创建了更多类型名,定义在stdint.h中。
- 精确宽度整数类型(exact-width integer type):如int32_t, uint_32_t。但是这些依赖于计算机的底层系统的支持。
- 最小宽度类型(minimum width type): int_least8_t表示可容纳8位有符号整数值的类型中宽度最小的类型的一个别名。
- 最快最小宽度类型(fastst minimum width type): 如int_fast8_t 表示对8位有符号值而言运算最快的整数类型的别名。
- 最大整数类型:intmax_t、uintmax_t.
2.有了以上定义类型,就需要提供相应的输入和输出,定义在inttypes.h中。C语言提供了一些字符串宏(后面会提到)来看是可以值类型。如PRid32代表打印32位有符号值的合适转换说明。
可移植类型的更多解析见书的附录B。
long、short、unsigned、signed基本整数类型的变式
long要添加L、l后缀,long long使用LL后缀,u表示unsigned。
%u输出unsigned int。
%ld输出long。
%lx以十六进制数处long。
%lo以八进制输出long。
%hd输出short。
%hu以八进制输出unsigned long。
%lld输出long long。
%llu unsigned long long。
char
字母和其他字符,也表示较小的整数。
单引号括起来的字符。实际存储的是相应的代码值。ASCII值。
- 非打印字符
char beep = 7; //直接使用ASCII
char beep = \a;//使用转义字符
以上两句是一样的,都是蜂鸣。警报字符改变活跃位置。
使用ASCII码要注意数字和数字字符的区别。
%c打印字符
float、double、long double 带小数点的数。
在声明的时候加上f或F后缀,编译器会识别成float类型。使用l或L后缀,编译器会识别成long double类型。没有后缀默认是double类型。
- 十六进制表示浮点型:p代替e,用2的幂代替10的幂(p计数法)。
0xa.1fp10 - a = 10
.1 = 1/16
.0f = 15/256
p10 = 2^10
%f输出浮点数。%e打印指数计数法的浮点数。如果系统支持十六进制,可用啊替代e。
%Lf、%Le、%La打印long double。
浮点数的溢出分为上溢(underflow)和下溢(subnormal)。
- 上溢:计算导致数字过大,超过当前类型能表达的范围。
- 下溢:损失了类型全精度的浮点值称为低于正常的浮点值。
特殊的浮点值:NaN(not a number)。碰到未定义行为会返回NaN值。
void
_Bool
布尔值(true|flase)仅占一个bit。
_Complex
复数
_Imaginary
虚数