第二章 类型、运算符与表达式
2.1 变量名
2.2 数据类型及长度
char 字符型,占用一个字节
int 整型,通常反映了所用机器中整数的最自然的长度
float 单精度浮点型
double 双精度浮点型
限定符:short、long、signed、unsigned
练习2-1 编写一个程序以确定分别由 signed 及 unsigned 限定的 char、short、int 与 long 类型变量的取值范围。采用打印标准头文件中的相应值以及直接计算两种方式实现。后一种方法的实现较困难一些,因为要确定各种浮点类型的取值范围。
2.3 常量
整数,不加什么,默认为int类型,结尾加 l 或 L 为 long 型。ul 或 UL 为 unsigned long 型。以 0 开头表示八进制,0x开头表示十六进制。
浮点数, 没有后缀的为 double 型,后缀为 f 或 F 表示 float 类型,后缀为 l 或 L 表示 long duble。
字符常量是一个整数
\a 响铃符 \\ 反斜杠
\b \? \f \' \n \" \r \ooo \t \xhh \v
枚举
2.4 声明
2.5 算术运算符
2.6 关系运算符与逻辑运算符
1 for ( i=0; i<lim-1 && (c=getchar()) != '\n' && c != EOF; ++i ) 2 s[i] = c;
练习2-2 在不使用运算符 && 或 || 的条件下编写一个与 上面的 for 循环语句等价的循环语句。
2.7 类型转换
一般来说,自动转换是指把“比较窄的”操作数转换为“比较宽”的操作数,并且不丢失信息的转换。针对可能导致信息丢失的表达式,编译器可能会给出警告信息。
1 int atoi(char s[]) 2 { 3 int i, n; 4 5 n = 0; 6 for ( i=0; s[i] >= '0' && s[i] <= '9'; ++i ) { 7 n = 10 * n + (s[i] - '0'); 8 } 9 return n; 10 11 }
将一串数字(字符)转换为一个数值
练习2-3 编写函数 htoi(s), 把由十六进制数字组成的字符串(包含可选的前缀0x或0X)转换为与之等价的整型值。字符串中允许包含的数字包括:0~9、a~f以及A~F。