Objective - C 2.0 编程基础:存储类、作用域及相关编程元素解析
1. 操作数转换规则
在进行操作数转换时,有以下规则:
- 若无符号操作数的大小等于或大于有符号操作数,有符号操作数将转换为无符号操作数的类型,结果类型也为该无符号操作数的类型。
- 若有符号操作数能表示无符号操作数的所有值,且能完整表示其取值范围,无符号操作数将转换为有符号操作数的类型,结果类型也为该有符号操作数的类型。
- 若上述条件都不满足,两个操作数都将转换为与有符号类型对应的无符号类型。
在大多数情况下,操作数的转换表现良好,但需注意以下几点:
1. 在某些机器上,将 char
转换为 int
可能涉及符号扩展,除非 char
被声明为无符号类型。
2. 有符号整数转换为更长的整数时,符号位会向左扩展;无符号整数转换为更长的整数时,左边会用零填充。
3. 任何值转换为 _Bool
类型时,若值为零则结果为 0,否则为 1。
4. 长整数转换为短整数时,整数左边会被截断。
5. 浮点值转换为整数时,小数部分会被截断。若整数无法容纳转换后的浮点值,结果未定义;将负浮点值转换为无符号整数时,结果也未定义。
6. 长浮点值转换为短浮点值时,截断前可能会进行四舍五入,也可能不会。
2. 存储类和作用域
存储类指编译器为变量分配内存的方式,以及特定函数或方法定义的作用域。存储类包括 auto
、 static
、