第二讲 Objective-C 运算符与表达式

数据类型

  • 基本数据类型
    intfloatdoublechar等。

1 . int类型表示整数,长度与硬件有关。格式化字符串为:

格式化字符串 进制
%d, %i 十进制
%o, %#o 八进制
%x, %#x 十六进制
#import <Foundation/Foundation.h>

int main(int argc, char **argv)
{
        NSLog(@"%d", 8);     //8
        NSLog(@"%i", 8);     //8
        NSLog(@"%o", 8);     //10
        NSLog(@"%#o", 8);    //010
        NSLog(@"%x", 8);     //8
        NSLog(@"%#x", 8);    //0x8

        return 0;
}

数据类型的长度,可以用sizeof获取。字面常量默认为int类型,长整型需要加lL,如123l

2 . float表示单精度浮点类型。可以用小数或者科学计数法表示:

表示方法
小数形式 10.2f
科学计数法 1.2e

格式化字符串:

格式化字符串 结果
%1.3f 10.200
%g 10.2
%1.3e 1.020e+01
NSLog(@"%1.3f", 10.2f);
NSLog(@"%g", 10.2f);
NSLog(@"%1.3e", 10.2f);

字面常量默认为double类型,float类型需要加fF,如123.4f

3 . char表示字符类型,存放单个字符,用单引号引起来,如’a’、’2’、’$’等。如果时特殊字符需要转义。

转义字符 含义
\’ 单引号

char类型本质上来说还是一个整数:[-128, 127]

4 . 可以在intfloatdoublechar之前增加限定词:

signed    //缺省,有符号的
unsigned    //无符号的
long        //表示较大的值
long long
short        //表示较小的值
//格式化输出
long int    //%li, %ld
long long    //%lli, %lld

示例:

unsigned char //无符号字符型 0-255
unsigned int  //无符号整数,表示正整数和0,常量为2000u

unsignedlong这些修饰符可以组合使用。

5 . 枚举数据类型
可以定义一组相关整型常量的时候,可以定义枚举类型。如表示方位:

enum Direction {
    kEast,         //0, 默认从0开始
    kSouth,        //1, 依次加1
    kWest = 10,    //10, 可以指定特定的整数值
    kNorth         //11, 依次以上一个值加1
};

6 . BOOL布尔类型
取值范围:YESNO
在进行逻辑判断的时候,0为假,非0为真。这就决定了,不能使用YES与其它的值比较来确定真假。

12 != NO;    //真
0 == NO;    //真
12 == YES;    //假,但是不应该这么比较
  • 对象类型
    由类声明的指针类型(指向对象的指针):
NSString *str;
NSMutableArray *array;
  • id类型
    表示任意的对象类型的指针,可以指向任意类型的对象:
NSString *str = @"戴维营教育";
id obj = str;

NSArray *array = @[@12, @123, @345];
obj = array;

类型转换

  • 自动数据类型转换

根据数据类型自动从取值范围小的类型向取值范围大的类型进行转换:
BOOL/char/short int/枚举类型 -> int -> long -> long long -> float -> double -> long double

  • 强制数据类型转换
    可能导致精度丢失甚至数据溢出。

    int sum = 100;
    int num = 13;
    float average1 = sum / num;         //7,自动数据类型转换
    float average2 = (float)sum / num;  //7.6923,强制数据类型转换
    

数据类型转换的时候,需要注意各自的表示范围,防止发生溢出导致不可预料的结果。

常量与变量

  • 声明常量使用const关键字:
    const double PI = 3.141592654;
    
  • 变量按作用范围(作用域)分为:全局变量、局部变量和成员变量
int number;    //全局变量

@interface DVIStudent : NSObject
{
    int _age;    //成员变量
}
@end

@implementation DVIStudent
- (void)print
{
    int sum = 0;    //局部变量
    for (int i = 0; i < 10; i ++)
    {
        sum += i;
    }

    NSLog(@"sum: %d", sum);
    NSLog(@"age: %d", _age);
}
@end

运算符和表达式

  • 逻辑运算符(&&||)

&&: 逻辑与,如果一个操作数为假,则表达式为假,并且当左边的操作数为假的时候,整个表达式为假,不需要继续计算右边的表达式。

||: 逻辑或,如果一个操作数为真,则整个表达式为真,并且当左边的操作数为真的时候,整个表达式为真,不需要继续计算右边的表达式。

  • 位运算符(&|~^>><<)
运算符 作用
& 按位与,0001 & 0101 = 0001
| 按位或,0001 | 0101 = 0101
~ 按位取反,~0101 = 1010
^ 按位异或,0001 ^ 0101 = 0100
>> 逻辑右移操作,0101 >> 1 = 0010
<< 逻辑左移操作,0101 << 2 = 1010

  • 条件运算符(?:)
int a = 100;
int b = 20;
int result = (a > b)?a:b;    //100, 当条件表达式位真的时候,结果位`?`后面的值,否则为`:`后的值。
标签: ,
文章分类 Objective-C开发系列

发表评论