Objective C中的数据类型


Objective C中的数据类型

内容概述

  • 整型
  • 浮点型
  • 字符型
  • 布尔型
  • 整型修饰符 short long signed unsigned
  • 特殊类型 id

5.1 整型

整型是一个或多个数字序列,有正负之分。可以表示为8进制和16进制,八进制前面加0,16进制前面加0x。

整型的长度根据不同的机器有所不同,一般是32位,可以使用sizeof函数测试整型的长度。

有使用我们可以使用NSInteger表示长整型,使用NSUInteger表示无符号长整型。

typedef long NSInteger;

typedef unsigned long NSUInteger;

下面是一些整型的定义及NSLog输出格式:

#import \<Foundation/Foundation.h\>

int main(int argc, const char \* argv[])

{

    @autoreleasepool {

        // 有符号整型

        int test1 = -100;

        NSLog(@"%d",test1);

        // 无符号整型

        unsigned int test2 = 200;

        NSLog(@"%u",test2);

        // 8进制整型

        int test3 = 0123;

        NSLog(@"%o",test3);

        // 16进制整型

        int test4 = 0x127ff;

        NSLog(@"%x",test4);

        int test5 = 0xffff;

        NSLog(@"%x",test5);

        // 测试整型长度

        int size = sizeof(test1);

        NSLog(@"size=%d",size);

        //NSInteger 表示长整型

        NSInteger i = 1234;

        NSLog(@"%ld",i);

        // NSUInteger 表示无符号长整型

        NSUInteger j = 5678;

        NSLog(@"%lu",j);

    }

    return 0;

}

上述代码的输出结果为:

2013-03-02 10:47:01.313 chapter05[395:303] -100

2013-03-02 10:47:01.314 chapter05[395:303] 200

2013-03-02 10:47:01.315 chapter05[395:303] 123

2013-03-02 10:47:01.315 chapter05[395:303] 127ff

2013-03-02 10:47:01.315 chapter05[395:303] ffff

2013-03-02 10:47:01.315 chapter05[395:303] size=4

2013-03-02 10:47:01.316 chapter05[395:303] 1234

2013-03-02 10:47:01.316 chapter05[395:303] 5678

5.2 浮点类型

浮点类型是带有小数点的数据类型,浮点类型可以分为单精度float类型和双精度double类型。一般双精度类型的长度是单精度的两倍,表示的数据更精确。

浮点类型可以省略小数点前或后面的数字,例如 .123 或者 123 NSLog输出使用%f,可以使用科学计数法表示,例如:1.8e4 等价于1.8乘以10的4次方。

下面是一些有关浮点类型的定义和NSLog输出。

#import \<Foundation/Foundation.h\>

int main(int argc, const char \* argv[])

{

    @autoreleasepool {

        // float 类型

        float pi = 3.14;

        NSLog(@"pi=%f",pi);

        // float 类型的长度

        int size = sizeof(pi);

        NSLog(@"size=%d",size);

        // double类型

        double d = 3.14159;

        NSLog(@"d=%f",d);

        // double类型的长度

        size = sizeof(d);

        NSLog(@"size=%d",size);

        // 科学计数法表示

        double test = 0.31e2;

        NSLog(@"test=%f",test);

    }

    return 0;

}

上述代码的输出结果为:

2013-03-02 11:06:17.966 chapter05-02[515:303] pi=3.140000

2013-03-02 11:06:17.967 chapter05-02[515:303] size=4

2013-03-02 11:06:17.968 chapter05-02[515:303] d=3.141590

2013-03-02 11:06:17.968 chapter05-02[515:303] size=8

2013-03-02 11:06:17.968 chapter05-02[515:303] test=31.000000

5.3 字符型char

字符型char表示一个单个字符,使用单引号括起来,例如,char c = 'A' char c1 = '*' char c2 ='\n'。NSLog输出格式为 %c。下面表列出了常用的转义字符:

表1.1 转义字符

转义字符 表达意义
\a 声音警告
\b 退格
\n 换行
\r 回车
\t 水平制表符
\v 垂直制表符
\ 反斜杠
\" 双引号
\' 单引号

另外,char类型和int类型可以相互转换。下面是一些char类型的定义和NSLog的输出。

#import \<Foundation/Foundation.h\>

int main(int argc, const char \* argv[])

{

    @autoreleasepool {

      // char类型

        char c = 'A';

        NSLog(@"%c",c);

      // int类型和char类型可以相互转换

        int i = c;

        NSLog(@"i=%d",i);

      // 转义字符

        char x = '\r';

        NSLog(@"Hello%cWorld",x);

    }

    return 0;

}

5.4 布尔类型

在Objective C中的布尔类型其实是无符号char的1和0,typedef signed char BOOL;使用BOOL来定义,一般赋值为YES或NO。下面是YES和NO的定义。

#define YES (BOOL)1

#define NO  (BOOL)0

下面是布尔类型的定义和输出。

#import \<Foundation/Foundation.h\>

int main(int argc, const char \* argv[])

{

    @autoreleasepool {

        // 布尔类型

        BOOL isLoop = YES;

        NSLog(@"isLoop=%d",isLoop);

        isLoop = NO;

        NSLog(@"isLoop=%d",isLoop);

    }

    return 0;

}

上述代码的输出结果为:

2013-03-02 11:38:04.474 chapter05-04[662:303] isLoop=1

2013-03-02 11:38:04.475 chapter05-04[662:303] isLoop=0

5.5 整型修饰符 short long signed unsigned

一般人们会认为short、long等是一种数据类型,其实这是错误的。short、long、singed和unsigned都是整型的修饰类型。例如short int 表示短整型,一般简写为short,long int表示长整型一般简写为long。而signed表示有符号整型,unsigned表示无符号整形。换句话说,long 和 short 是扩大或缩小数值范围,unsigned和signed是有无符号。

如下代码等价:

#import \<Foundation/Foundation.h\>

int main(int argc, const char \* argv[])

{

    @autoreleasepool {

        // 长整型

        long int test1 = 1;

        // 缩写

        long test2 = 1;

        int size = sizeof(test2);

        NSLog(@"size=%d",size);

        // 无符号整型

        unsigned int test3= 1;

        // 缩写

        int test4 = 1;

        // 短整型

        short int test5 = 1;

        // 缩写

        short test6 = 1;

        size = sizeof(test6);

        NSLog(@"size=%d",size);

    }

    return 0;

}

上述代码的输入结果是:

2013-03-02 11:51:44.683 chapter05-05[702:303] size=8

2013-03-02 11:51:44.685 chapter05-05[702:303] size=2

5.6 特殊类型 id

在Objective C面向对象的概念中,id类型可以表示任意的对象类型。也就是说我们可以将任何的对象赋值给id类型。一般当某个方法无法明确返回值类型时,我们可以指定返回id类型,例如,NSObject的初始化方法init。下面是一下id类型的声明方法。

#import \<Foundation/Foundation.h\>

int main(int argc, const char \* argv[])

{

    @autoreleasepool {

        // 实例化NSObject对象赋值给id类型

        id obj = [[NSObject alloc]init];

        // 实例化数组赋值给id类型

        id array = [[NSArray alloc]init];

        // 字符串赋值给id类型

        id str = @"Hello World";

        // NSObject init 方法的定义

        // - (id)init;

    }

    return 0;

}