第4章 数据类型和表达式
本章中,我们将讲解Objective-C的基本数据类型,并描述一些用于构成算术表达式的基本规则。
4.1 数据类型和常量
你已经接触过Objective-C的基本数据类型int。回顾一下,声明为int类型的变量只能用于保存整型值,也就是没有小数位的值。
Objective-C还提供了另外3种基本数据类型:float、double和char。声明为float类型的变量可存储浮点数(即包含小数位的值)。double类型和float类型一样,只不过前者的精度约是后者精度的两倍而已。最后,char数据类型可存储单个字符,例如字母a、数字字符6或者一个分号(稍后将详细讨论有关内容)。
在Objective-C中,任何数字、单个字符或者字符串通常都称为常量。例如,数字58表示一个常量整数值,字符串@“Programming in Objective-C is fun.\n”表示一个常量字符串对象。完全由常量值组成的表达式叫做常量表达式。因此,表达式
128+7-17
是一个常量表达式,因为该表达式的每一项都是常量值。然而,如果将i声明为整型变量,那么表达式
128+7-i
就不是一个常量表达式。
4.1.1 int类型
在Objective-C中,整数常量由一个或多个数字的序列组成。序列前的负号表示该值是一个负数。值158、-10和0都是合法的整数常量。数字中间不允许插入空格,大于999的值不能用逗号来表示(因此,值12 000是一个非法的整数常量,它必须写成12000)。
Objective-C中存在两种特殊的格式,它们用一种非十进的方式来表示整数常量。如果整型值的第一位是0,那么这个整数将用八进制计数法来表示,就是说用基数8来表示。在这种情况下,该值的其余位必须是合法的八进制数字,那必须是0到7之间的数字。因此,在Objective-C中以八进制表示的值50(等价于10进制的值40),表示方式为050。与此类似,八进制的常量0177表示十进制的值127(1×64+7×8+7)。通过在NSLog调用的格式字符串中使用格式符号%o,可在终端上用八进制显示整型值。在这种情况下,用八进制显示的值不带有前导0,而格式符号%#o将在八进制值的前面显示前导0。
如果整型常量以0和字母x(无论是小写字母还是大写字母)开头,那么这个值都将用十六进制(以16为基数)计数法来表示。紧跟在字母x后的是十六进制值的数字,它可由0到9之间的数字和a到f(或A到F)之间的字母组成。字母表示的数字分别为10到15。因此,要给名为rgbColor的整型常量指派十六进制的值FFEF0D,可使用以下语句:
rgbColor=0xFFEF0D;
格式符号%x将用十六进制格式显示一个值,该值不带前导的0x,并用a到f之间的小写字符表示十六进制数字。要使用前导0x显示该值,使用格式字符%#x,如下所示:
NSlog(“Color is%#x\n”,rgbColor);
%X或%#X中的大写字母X,可用于显示前导的x,而随后用大写字母表示的十六进制数字。每个值,不管是字符、整数还是浮点数字,都有与其对应的值域。这个值域与存储特定类型的值而分配的内存量有关。一般来说,在语言中没有规定这个量,它通常依赖于所运行的计算机,因此叫做设备或机器相关量。例如,一个整数可在计算机上占用32位,或者可以使用64位存储。
永远不要编写假定数据类型大小的程序。然而,要保证为每种基本数据类型留出最小数量的内存。例如,要保证整型值存储在32位中。然而,这一点不能保证。参见附录B中的表B-3,了解有关数据类型大小的更多信息。