您的位置:首页 > 移动开发 > Objective-C

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

2011-10-18 13:58 309 查看

变更履历

版本: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
int12、-97、0xFFE0、0177%i、%x、%o
unsigned int12u、100U、0XFFu%u、%x、%o
long int12L, -2001, 0xffffL%li, %lx, %lo
unsigned long int12UL, 100ul, 0xffeeUL%lu, %lx, %lo
long long int0xe5e5e5e5LL, 500ll%lli, %llx, &llo
unsigned long long int12ull, 0xffeeULL%llu, %llx, %llo
float12.34f, 3.1e-5f, 0x1.5p10, 0x1P-1%f, %e, %g, %a
double12.34、3.1e-5、0x.1p3%f、%e、%g、%a
long double12.34L、3.1e-5l%Lf、$Le、%Lg
idnil%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 实现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐