1、第3章 语句,一个程序是由多个语句构成的,语句在程序中起着重要的功能,所以程序的基本单位是语句。要想开发Objective-C程序,我们要先学习Objective-C程序的语句。在Objective-C语句中,我们会用到有关运算符的计算结果以及语句块的作用域。本章将详细介绍这些内容。,3.1 语句的构成,Objective-C中,语句是由表达式加上”;”构成的。基本语句有控制语句、表达式语句、空语句、复合语句、函数调用语句。这里我们主要讲表达式语句,其它语句在以后用到我们再讲。,3.1 语句的构成,3.1 语句的构成,3.2 运算符及表达式,在Objective-C语言提供了丰富的运算符。运算
2、符用于执行程序代码运算,会针对一个以上操作数项目来进行运算。但它不直接提供表达式。所有的表达式需要用户使用运算符进行组合构成。本节主要讲解各运算符及其表达式。,3.2.1 算术运算符及表达式,算术运算符包括加、减、乘、除运算符(+、-、*、/)和求模取余运算符(%)。算术运算符是双目运算符,其操作数一般是整数和浮点数(或者是结果为整数或浮点数的表达式)。,3.2.1 算术运算符及表达式,3.2.1 算术运算符及表达式,3.2.1 算术运算符及表达式,3.2.1 算术运算符及表达式,3.2.2 自增自减运算符,自增运算符可记为“+”,其作用是使变量的值自增1。自减运算符可以记为“-”,其作用为使
3、变量的值自减1。自增自减运算符均为单目运算符,都具有右结合性。,3.2.2 自增自减运算符,3.2.3 位运算符,内存存储数据的基本单位是字节(Byte),一个字节由8个位(bit)所组成。位是用以描述电脑数据量的最小单位。二进制系统中,每个0或1就是一个位。位运算是指按二进制进行的运算。Objective-C的位运算是直接对整型数据的位进行操作,这些数据类型包括有符号或没符号的char、short、int、long类型。,3.2.3 位运算符,3.2.3 位运算符,1、左移运算符(),左移运算符是用来将一个数二进制位左移若干位,移出的位数由右操作数指定(右操作数必须是非负值),其右边空出的位
4、用0填补,高位左移溢出则舍该高位。,1、左移运算符(),2、右移运算符(),右移运算符是用来将一个数二进制位右移若干位,移出的位数由右操作数指定(右操作数必须是非负值),移到右端的低位舍弃。,2、右移运算符(),3.2.4 赋值运算符及表达式,将某一数值赋给某个变量的过程,称为赋值。赋值运算符有简单一的,也有复合的。有程序指定赋值,也有人将制定赋值。,1、单一的赋值运算符及表达式,简单的赋值运算符为“=”,由“=”连接的式子称为赋值表达式。,2、复合的赋值运算符及表达式,在赋值运算符中有一类是很重要的运算符就是复合赋值运算符,在赋值运算符“=”之前加上其他二目运算符可构成复合赋值符。它其实是一
5、种缩写形式,使得对变量的改变更加简洁。,2、复合的赋值运算符及表达式,2、复合的赋值运算符及表达式,2、复合的赋值运算符及表达式,3、指定赋值,在程序中由于被指定的赋值对象不一样,可以分为程序指定赋值和人工输入赋值。程序指定赋值主要是通过赋值运算符实现的。,3、指定赋值,4、变量初始化,变量声明是确认该标识符已被系统使用,定义是为变量所代表的值分配内存。初始化时是指定该内存保存的值。如果没有对变量进行初始化,该变量的值是不确定的。由此可见,对变量初始化是相当有必要的,在Objective-C中,变量的声明和定义是放在一起进行的。,4、变量初始化,4、变量初始化,int a=3; float x
6、=3.2,y=3f; char ch1=k,3.2.5 关系运算符及表达式,关系运算将两个运算分量进行大小比较,其运算结果类型为布尔数据类型。若关系成立时,结果为YES(1),当结果不成立时,结果为NO(0)。由关系运算符构成的表达式称为关系运算表达式。,3.2.5 关系运算符及表达式,3.2.5 关系运算符及表达式,3.2.6 条件运算符,条件运算符是一个三目运算符,用于条件的求值(?:)。条件运算符经常在Objective-C中使用到。,3.2.6 条件运算符,3.2.7 布尔逻辑运算符及表达式,在有的时候,语句需要满足多个条件才可以执行,这时就要把多个条件组合在一起。Objective-
7、C提供了布尔逻辑运算符来实现这一组合的功能。由逻辑运算符构成的表达式称为逻辑运算表达式。,3.2.7 布尔逻辑运算符及表达式,3.2.7 布尔逻辑运算符及表达式,3.2.7 布尔逻辑运算符及表达式,3.2.7 布尔逻辑运算符及表达式,3.2.8 逗号运算符及表达式,Objective-C中逗号“,“也是一种运算符,称为逗号运算符。,3.2.9 求字节数运算符,sizeof运算符是用来计算数据类型所占的字节数的。由于不同的计算机支持的数据类型长度是不一样的,因此需要一个运算符来测量该机器中的数据类型长度。Objective-C中提供了sizeof运算符。,3.2.10 特殊的运算符,在Objec
8、tive-C中除了一些常用到的运算符之外,还有一些特殊的运算符。如圆括号(())、下标()、成员(.)、负号(-)等。,3.2.10 特殊的运算符,在Objective-C中处了一些常用到的运算符之外,还有一些特殊的运算符。如圆括号(())、下标()、成员(.)、负号(-)等。,3.2.10 特殊的运算符,3.2.11 运算符的优先级及,优先级是一种约定,优先级高的先做,优先级低的后做,有规有矩,不会乱套。,3.2.11 运算符的优先级及,3.2.11 运算符的优先级及,3.2.11 运算符的优先级及,3.3 类型转换,我们经常会遇到赋值运算符右边的数据类型和左边的数据类型不一样,这就需要进行
9、数据类型转换。数据类型转换是将赋值运算符左右两边的数据类型变为一致。数据类型转换可以分为自动转换和强制转换。本节主要讲解自动类型转换和强制类型转换。,3.3.1 自动转换,自动转换发生在不同数据类型的数据混合运算时,由系统自动完成。Objective-C编译器会遵循一些非常严格的规则。,1.多种数据类型,在一个程序中出现了多个数据类型。当要对这多个同时出现的数据类型的表达式进行计算时,就会把出现的所有的数据类型都转换为同一种数据类型。,2.利用赋值运算符,当赋值运算符右边的表达式数据类型与左边的数据类型不同时。将会把右边计算结果的数据类型转换为和左边一样的数据类型。,3.3.2 强制类型转换,
10、强制类型转换也就是显性转换。如果系统的自动转换不是我们所想要的结果,那么我们可以通过强制类型转换将一个表达式的数据类型转换成我们所需的数据类型。,3.4 语句块,在程序开发中,我们常常会把多条语句放在“”中执行,这些多条语句就组成了复合语句。复合语句加上所在的“”也就构成了语句块。本节主要讲解语句块的结构和作用域的分类和形式。,3.4.1 语句块的结构,在Objective-C程序中,多个连续的语句组成语句块(复合语句)。语句块一般以一对大括号“”为标志。,3.4.1 语句块的结构,3.4.1 语句块的结构,3.4.2 作用域,在Objective-C源文件中,变量的作用域是指变量的有效范围。根据变量是在一对“”之中还是在程序的所有的“”之外来确定变量的作用域。一般变量的作用域分为全局变量和局部变两种。,3.4.2 作用域,3.4.2 作用域,3.5 小结,本章主要讲解Objective-C程序语句中经常用到的运算符、语句块的构成以及源文件中变量的作用域。在这里重点是掌握运算符的使用以及优先级判断,还有变量的作用域范围。希望读者可以熟练掌握这些运算符的运算。,