Objective-C 2.0 学习笔记三(数据类型和表达式)

变更履历

版本:v1.0

简介

这一章主要描述 OC 的基本数据类型,并描述一些用于构成算术表达式的基本规则。

数据类型和常量

在 Objective-C 中,任何数字、单个字符或者字符串通常都成为常量。

int、float、double、char

每一个值,不管是字符、整数还是浮点数字,都有与其对应的值域,这个值域与存储特定类型的值而分配的内存有关。一般来说,语言中没有规定这个量,它通常依赖于所运行的计算机,因此叫做设备或机器相关量。

这也是告诉我们,做开发时,尽量不要去假定数据类型的大小。

id 类型

id 数据类型可以存储任何类型的对象,它是 OC 中十分重要的特性,是多态和动态绑定的基础。

-(id) newObject: (int) type
{
    ...
}

基本数据类型

类型 实例常量 NSLog 字符
char 'a'、'\n' %c
short int - %hi、%hx、%ho
unsigned short int - %hu、%hx、%ho
int 12、-97、0xFFE0、0177 %i、%x、%o
unsigned int 12u、100U、0XFFu %u、%x、%o
long int 12L, -2001, 0xffffL %li, %lx, %lo
unsigned long int 12UL, 100ul, 0xffeeUL %lu, %lx, %lo
long long int 0xe5e5e5e5LL, 500ll %lli, %llx, &llo
unsigned long long int 12ull, 0xffeeULL %llu, %llx, %llo
float 12.34f, 3.1e-5f, 0x1.5p10, 0x1P-1 %f, %e, %g, %a
double 12.34、3.1e-5、0x.1p3 %f、%e、%g、%a
long double 12.34L、3.1e-5l %Lf、$Le、%Lg
id nil %p

算数表达式

整数值和浮点值的互相转换

// Basic conversions in Objective-C
#import <Foundation/Foundation.h>
int main (int argc, char *argv[])
{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    float f1 = 123.125, f2;
    int i1, i2 = -150;
    i1 = f1; // floating to integer conversion
    NSLog (@"%f assigned to an int produces %i", f1, i1);
    f1 = i2; // integer to floating conversion
    NSLog (@"%i assigned to a float produces %f", i2, f1);
    f1 = i2 / 100; // integer divided by integer
    NSLog (@"%i divided by 100 produces %f", i2, f1);
    f2 = i2 / 100.0; // integer divided by a float
    NSLog (@"%i divided by 100.0 produces %f", i2, f2);
    f2 = (float) i2 / 100; // type cast operator
    NSLog (@"(float) %i divided by 100 produces %f", i2, f2);
    [pool drain];
    return 0;
}

在 OC 中,只要将浮点值赋给整形变量,数字的小数部分都将被删除。把整型变量指派给浮点变量不会引起数值的任何改变。

算术表达式的两点规则

  • 当表达式中的两个运算数是整数(),该运算就将在整数运算规则下进行。因此,由运算产生的任何小数部分都将被删除,即便将结果指配给一个浮点变量也是如此。可以参见程序中的第三个输出。
  • 当表达式中的两个运算数有一个是浮点变量或常量,那么这一运算将作为浮点运算来处理。可以参见程序中的第四个输出。

类型转换运算符

与其它语言一样,(float) a 可作为一个强制类型转换。用法如下:

int a = (int) 29.55 + (int) 21.99;

float f = (float) 6 / (float) 4;

id number;
Fraction *fraction;
fraction = (Fraction *) number;

赋值运算符

OC 支持 op= 这种语法,op 可以是任何算术运算符,包括 +、-、*、/ 和 %。此外,op 还可以是任何用于移位和屏蔽操作的运算符。

counter -=5;

位运算符

符号 运算 符号 运算
& 按位与 ~ 一次求反
| 按位或 << 左移位
^ 按位异或 >> 右移位

右移位运算符

从值的低位移出得位将丢失。把无符号的值向右移位总是在左侧(高位)移入0。对于有符号值而言,左侧移入1还是0依赖于被移动数字的符号,还取决于该操作在计算机上的实现方式。如果符号位是0(表示正数),不管那种机器都将移入0。然而,如果符号位是1,则不一定。前一类型的运算符通常称为算术右移,后者通常称为逻辑右移。

不要去假设系统使用算术右移还是逻辑右移,这可能会造成未知的错误。

类型 _Bool、_Complex 和 _Imaginary

用于处理 Boolean(0 或 1)值的 _Bool,以及分别用于处理复数和抽象数字的 _Complex 和 _Imaginary。

OC 推荐使用 BOOL 数据类型来代替 _Bool 来处理 Boolean 值。BOOL 本身实际上并不是真正的数据类型,它只是 char 数据类型的别名,通过关键字 typedef 实现。




阅读更多
个人分类: Objective-C
想对作者说点什么? 我来说一句

ppt对数据类型和表达式的讲解

2013年01月17日 1.27MB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭