Objective C中的运算符 Objective C中的数据类型 Objective C流程控制、数据结构 Objective C中的运算符 内容概述 赋值运算 算术运算 自增自减 关系运算 逻辑运算 位运算 6.1 赋值运算 赋值是用等号运算符(=)进行的,它的意思是"取得右边的值,把它复制到左边",右边的值可以是任何常数、变量或者表达式,只要能产生一个值就行,但左边的值必须是一个明确的、已命名的变量。也就是说,它必须有一个物理性的空间来保存右边的值。下面通过一个案例来演示赋值运算,该案例演示了常量赋值、变量赋值、表达式赋值、函数赋值以及引用类型赋值。 #import <Foundation/Foundation.h> #import "Person.h" // 求和函数 int sumFun(int a,int b){ return a+b; } // 求平均数函数 int avgFun(int a,int b){ return (a+b)/2; } int main(int argc, const char * argv[]) { @autoreleasepool { /******赋值运算********/ // 常量赋值 int age = 20; NSString *name = @"tom"; char c = 'A'; BOOL b = YES; // 变量赋值 int myAge = age; NSString *myName = name; char myChar = c; BOOL myBoolean = b; // 表达式赋值 int x = 1+2; int i =1,j = 2; int sum = i+j; // 函数返回值赋值 int mySum = sumFun(1,2); int myAvg = avgFun(2,4); // 引用类型赋值 id obj = [[NSObject alloc]init]; NSArray *array = [NSArray arrayWithObjects:@"ios", @"Android",nil]; Person *p1 = [[Person alloc]init]; // 地址传递 Person *p2 = p1; } return 0; } 6.2 算术运算 程序中的算术运算和数学中的算术运算基本相似,有加号(+)、减号(-)、乘号(*)、除号(/)、以及模数(%,取余)等。下面代码片段演示了算术运算的用法。 #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { // 获得随机数 int r = arc4random(); // 余100 int i = r%100; // 获得随机数 r = arc4random(); // 余100 int j = r%100; // 计算结果 int result; // 加运算 result = i+j; NSLog(@"%d+%d=%d",i,j,result); // 减运算 result = i-j; NSLog(@"%d-%d=%d",i,j,result); // 乘运算 result = i*j; NSLog(@"%d*%d=%d",i,j,result); // 除运算 result = i/j; NSLog(@"%d/%d=%d",i,j,result); } return 0; } 6.3 自增自减 所谓自增自减,就是在原有基础上加1,或者减1,使用++或者--。需要注意的是,++i(--i)在前时,先自增(自减),后运算。i++(i--)在后时,先运算,后自增(自减)。下面代码演示了++和—的用法。 #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { // 声明int类型变量 int i = 200; // 打印 NSLog(@"i=%d",i); // 先增加,后运算 NSLog(@"++i=%d",++i); // 先运算,后增加 NSLog(@"i++=%d",i++); // 打印i NSLog(@"i=%d",i); // 先自减,后运算 NSLog(@"--i=%d",--i); // 先运算,后自减 NSLog(@"i--=%d",i--); // 打印i NSLog(@"i=%d",i); } return 0; } 程序运行效果如下所示。 2013-04-22 10:35:26.573 chapter06-03[572:303] i=200 2013-04-22 10:35:26.575 chapter06-03[572:303] ++i=201 2013-04-22 10:35:26.575 chapter06-03[572:303] i++=201 2013-04-22 10:35:26.575 chapter06-03[572:303] i=202 2013-04-22 10:35:26.575 chapter06-03[572:303] --i=201 2013-04-22 10:35:26.576 chapter06-03[572:303] i--=201 2013-04-22 10:35:26.576 chapter06-03[572:303] i=200 6.4 关系运算 关系运算用来比较两个变量或表达式的大小,运算符有:小于(<)、大于(>)、小于或等于(<=)、大于或等于(>=)、等于(==)以及不等于(!=)。关系运算的比较结果是布尔值,即真或假。下面代码演示了关系运算的用法。 #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { // 获得随机值 int r = arc4random(); // 取余 int i = r%100; // 获得随机值 r = arc4random(); // 余100 int j = r%100; // 声明计算结果 NSString *result; // 判断,i是否大于j,并打印结果 result = i>j?@"YES":@"NO"; NSLog(@"%d>%d=%@",i,j,result); // 判断,i是否大于等于j,并打印结果 result = i>=j?@"YES":@"NO"; NSLog(@"%d>=%d=%@",i,j,result); // 判断,i是否小于j,并打印结果 result = i<j?@"YES":@"NO"; NSLog(@"%d<%d=%@",i,j,result); // 判断,i是否小于等于j,并打印结果 result = i<=j?@"YES":@"NO"; NSLog(@"%d<=%d=%@",i,j,result); // 判断,i是否等于j,并打印结果 result = i==j?@"YES":@"NO"; NSLog(@"%d==%d=%@",i,j,result); // 判断,i是否不等于j,并打印结果 result = i!=j?@"YES":@"NO"; NSLog(@"%d!=%d=%@",i,j,result); } return 0; } 代码运算结果如下所示。 2013-04-22 10:47:49.442 chapter06-04[634:303] -85>-4=NO 2013-04-22 10:47:49.444 chapter06-04[634:303] -85>=-4=NO 2013-04-22 10:47:49.444 chapter06-04[634:303] -85<-4=YES 2013-04-22 10:47:49.445 chapter06-04[634:303] -85<=-4=YES 2013-04-22 10:47:49.445 chapter06-04[634:303] -85==-4=NO 2013-04-22 10:47:49.445 chapter06-04[634:303] -85!=-4=YES 6.5 逻辑运算 逻辑运算符AND(&&)、OR(||)以及NOT(!)能生成一个布尔值(true 或false),以自变量的逻辑关系为基础。使用逻辑运算时,需要注意的一种情况是短路运行,短路运算是指,如果当前能判断结果,剩余部分将不再计算。下面是逻辑运算的用法。 #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { // 声明三个变量i,j,k int i=1,j=2,k=3; // 进行逻辑运算(短路与运算) BOOL r = (i>j)&&(++i<k); NSLog(@"r=%@",r?@"YES":@"NO"); NSLog(@"i=%d",i); NSLog(@"---------------"); r = (i>j)&(++i<k); NSLog(@"r=%@",r?@"YES":@"NO"); NSLog(@"i=%d",i); NSLog(@"--------------"); if((i>j)&&(++i<k)) NSLog(@"i=%d",i); } return 0; } 程序运算结果如下所示。 2013-04-22 10:58:46.612 chapter06-05[687:303] r=NO 2013-04-22 10:58:46.614 chapter06-05[687:303] i=1 2013-04-22 10:58:46.614 chapter06-05[687:303] --------------- 2013-04-22 10:58:46.615 chapter06-05[687:303] r=NO 2013-04-22 10:58:46.615 chapter06-05[687:303] i=2 2013-04-22 10:58:46.615 chapter06-05[687:303] -------------- 6.6 位运算 位运算是二进制整数,按位进行计算。位运算包括:与、或、非和异或运算。运算规则如下: 表6.1 位运算规则 位运算 运算规则 与 若两个输入位都是1,则按位AND 运算符(&)在输出位里生成一个1;否则生成0。 或 若两个输入位里至少有一个是1,则按位OR 运算符( )在输出位里生成一个1;只有在两个输入位都是0 的情况下,它才会生成一个0。 异或 若两个输入位的某一个是1,但不全都是1,那么按位XOR(^,异或)在输出位里生成一个1。 非 按位NOT 生成与输入位的相反的值——若输入0,则输出1;输入1,则输出0 下面是位运算的用法。 #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { int i = 5; // 0101 int j = 9; // 1001 int a = 2; // 0010 int b = 8; // 1000 int k = 0; k = i&j; // 0001 NSLog(@"k=%d",k); k = i|j; // 1101 NSLog(@"k=%d",k); k = ~i; // NSLog(@"k=%d",k); k = a<<2; // 1000 NSLog(@"k=%d",k); k = b>>2; // 0010 NSLog(@"k=%d",k); } return 0; } 程序运行结果如下所示。 2013-04-22 11:08:48.875 chapter06-06[708:303] k=1 2013-04-22 11:08:48.876 chapter06-06[708:303] k=13 2013-04-22 11:08:48.877 chapter06-06[708:303] k=-6 2013-04-22 11:08:48.877 chapter06-06[708:303] k=8 2013-04-22 11:08:48.877 chapter06-06[708:303] k=2 Objective C中的数据类型 Objective C流程控制、数据结构