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

Objective-C学习笔记:数据类型和表达式

2012-03-10 14:10 148 查看
1.数据类型和常量:

在Objective-c中提供了4种基本的数据类型:int float double以及char.

声明为int的变量只能用于保存整形值

声明为float类型的变量可存储浮点类型值(即包含小数位数.).

double类型和float类型一样,只不过前者的精度大约是后者的2倍。

最后是char 数据类型,char类型可用来存储单个字符,例如字母a,数字6,或是一个分号。

在OBJ中(为了打字快点,以下Objective-C都简称OBJ)中,任何的数字、单个字符或者字符串,都称为常量。例如:数字58为一个整数常量,字符串@"this is OBJ!\n"表示一个常量的字符串对象。完全又常量组成的表达式我们就称为常量表达式。

所以,表达式:

128+7-17

是一个常量表达式,这是因为其表达式的每一项都是一个常量值。但是如果把i声明为了整形的变量,那么表达式:

128+7-i

就不是一个常量表达式了.

下面说说关于4个数据类型的情况..

2.int类型

在OBJ中,整数常量是又一个或多个数字的序列所组成。序列前的负号表面该值是一个负数。合法值例如:10 、-10、158. 切记数字之间不能出现空格,且大于999的值不适用逗号来表示。比如:11000是一个合法的整数常量,但11 000是一个非法的常量.

OBJ中存在两种特殊的格式,它们用于非十进制方式保存整数常量。第一种:如果整形值的第一位为0,那么这个整数将用八进制的方式表示,也就是说用基数8来表示。这种情况下改值的其他余位的值必须都是合法的八进制数字,即必须是0到7之间的数字。例如在OBJ八进制表示的值50,表示的方式为050,等价于十进制表示的值40.

同理,八进制的常量0177表示为十进制的值127,算法为1*64+7*8+7 =127.

可以通过在NSLog(如果不理解NSLog,暂时可以把它想象为C#的message.show()或者js的alert())中调用的格式字符串中使用格式符号%o,可在终端上用八进制显示整型值:

例:

int a =177
NSLog(@"int is : %o\n",a);


在上面例子的情况下,输出的八进制值不带有前导0,输出带有0的写法如下:

int a = 177;
NSLog(@"%#o",a);


第二种情况:

如果整形常量以0和字母x(x无论大写还是小写)开头,那么这个值都将采用十六进制(即以16为基数)计数法里表示。紧跟在字母x后面的是十六进制的的数字,它可由0到9之间的任意数字或a到f(A到F)之间的字母组成。字母表示的数字分别为10到15。因此,给一个名为rgbColor的整型常量指派一个十六进制的值FFEF0D,可以使用以下语句:

rgbColor = 0xFFEF0D;


格式符号%x表示显示一个十六进制的值,该值不会带有前导0x,都是用a--f的小写字母表示十六进制的数字,需要带有前导0x,使用格式字符%#x表示:

NSLog(@"%#x\n",rgbColor);


不管是字符,浮点,整数,都有与其对应的值域,这个值域与存储特定类型的值而分配到的内存量有关,一般在语言当中没有规定这个量的大小,它依托于所运行的计算机,所以叫做设备的相关量.如一个整数可在计算机上占用32位,也可以使用64位存储。

2.float类型:

float类型可包含存储小数位数的值,例如值3.、125.8以及-.0001都是合法的浮点数。显示浮点数,可以使用NSLog(@"%f",floatType)。

浮点常量也能使用科学计数法的方式来表示,值1.74e4就是一种科学计数法,他表示的是1.7乘以10的4次方。位于字母e前面的称为尾数,后面的称为指数,指数的前面可以放置正好和负号。指数表示将与尾数相乘的10的幕。因此,2.225e-3表示2.225乘以10的-3次方,值为0.00225.

3.double类型

double类型和float类型很相似,一般使用double是在float不能满足精度(即所提供的值域)的要求时候。double类型变量可存储的位数大概是float的两倍多,大多数的计算机使用64位来表示double值。注意:除非你自己声明,否则OBJ均把所有浮点常量看都是double值,要清楚地表示float常量,一是声明float类型,二是在数字的尾部加一个f或则F,例如:

CGSizeMake(12.5f,13f);


要显示double类型的值,可使用%f,%e,或%g,它们显示float值所用的格式是相同的.

4.char类型
char类型可存储单个的字符。将字符放入一对括号中就可以得到字符常量。因此,'a'.'3'和';'都是合法的字符常量.第一个表示字母a,第二个表示字符3,第三个表示分号。第二个并不等同于数字的3.

字符常量'\n'(换行符)是一个合法的字符常量。因为反斜杠符号是OBJ中特殊符号。OBJ中将字符'\n'看作单个的字符,尽管它是由两个字符组成。

如下示例,使用了基本的数据类型:

#import <Foundation/Foundation.h>

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

{

NSAutoreleasePool *pool =[[NSAutorelelasePool alloc]init];

int numVar =10;

float floaVar =331.79;

double doubleVar =9.44e+11;

char charVar ='W';

NSLog(@"numVar:=%i",numVar);

NSLog(@"floatVar:=%f",floatVar);

NSLog(@"doubleVar:=%e",doubleVar );

NSLog(@"doubleVar :=%g",doubleVar );

NSLog(@"charVar:=%c",charVar);

[pool drain];

return 0;

}


输出:numVar =10;

floatVar =331.790009;

doubleVar =8.440000e+11;

doubleVar =8.44e+11;

charVar ='W';

注意:我们指派给floatVar的值实际上是331.79,但是为什么输出331.790009呢?实际上,显示的值是由特定的计算机系统决定的。在计算机内部使用特殊的方式管理数字。计算机在处理数字的时候,很可能会遇到不准确性,比如1除以3,计算出为3.3333333, 这一串的3实际只是一个近似值,理论上,应存在无数个3。然而计算机只能保存这些数字,这就是计算机的不确定性所致。此处应用了相同的不确定性,所以在内存中不能精确的表示一些浮点值!!

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐