1.数据类型和常量:
我们在做IOS程序开发的时候使用的最多的恐怕就是基本数据类型,在Objective-c中提供了4种基本的数据类型:int float double以及char.
1.1声明为int的变量只能用于保存整形值。
1.2声明为float类型的变量可存储浮点类型值(即包含小数位数).。
1.3double类型和float类型一样,只不过前者的精度大约是后者的2倍。
1.4最后是char 数据类型,char类型可用来存储单个字符,例如字母a,数字6,或是一个分号。或者通过char指针声明一个字符串,例如 char *string = "itheima"
在OC中,任何的数字、单个字符或者字符串,都称为常量。例如:数字2015为一个整数常量,字符串@"itheima HM2015!\n"表示一个常量的字符串对象。完全由常量组成的表达式我们就称为常量表达式。
所以,表达式:
2015+4-20
是一个常量表达式,这是因为其表达式的每一项都是一个常量值。但是如果把i声明为了整型的变量,那么表达式:
2015+4-i
就不是一个常量表达式了.
4种基本数据类型的介绍
2.int类型
在OC中,整数常量是又一个或多个数字的序列所组成。序列前的负号表面该值是一个负数。合法值例如:10 、-10、2015. 数字之间不能出现空格,例如22 000是一个非法的常量.
OC中存在两种特殊的格式,它们用于非十进制方式保存整数常量。第一种:如果整形值的第一位为0,那么这个整数将用八进制的方式表示,也就是说用基数8来表示。这种情况下改值的其他余位的值必须都是合法的八进制数字,即必须是0到7之间的数字。例如在OC八进制表示的值50,表示的方式为050,等价于十进制表示的值40.
同理,八进制的常量0177表示为十进制的值127,算法为1*64+7*8+7 =127.
可以通过在NSLog()中调用的格式字符串中使用格式符号%o,可在终端上用八进制显示整型值:
例:
1 int a =1772 NSLog(@"int is : %o\n",a);
在上面例子的情况下,输出的八进制值不带有前导0,输出带有0的写法如下:
1 int a = 177;2 NSLog(@"%#o",a);
第二种情况:
如果整形常量以0和字母x(x无论大写还是小写)开头,那么这个值都将采用十六进制(即以16为基数)计数法里表示。紧跟在字母x后面的是十六进制的的数字,它可由0到9之间的任意数字或a到f(A到F)之间的字母组成。字母表示的数字分别为10到15。因此,给一个名为rgbColor的整型常量指派一个十六进制的值FFEF0D,可以使用以下语句:
1 rgbColor = 0xFFEF0D;
格式符号%x表示显示一个十六进制的值,该值不会带有前导0x,都是用a--f的小写字母表示十六进制的数字,需要带有前导0x,使用格式字符%#x表示:
1 NSLog(@"%#x\n",rgbColor);
不管是字符,浮点,整数,都有与其对应的值域,这个值域与存储特定类型的值而分配到的内存量有关,一般在语言当中没有规定这个量的大小,它依托于所运行的计算机,所以叫做设备的相关量.如一个整数可在计算机上占用32位,也可以使用64位存储。
另外需要注意的是在OC中 推荐使用NSInteger来代替int,因为NSInteger会自动识别操作系统的位数,从而自动转换int为32位还是64位 而不用自己去指定,所以以后在IOS开发中,全部用NSInteger来代替int,算是一种标准的写法。
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值。注意:除非你自己声明,否则OC均把所有浮点常量看都是double值,要清楚地表示float常量,一是声明float类型,二是在数字的尾部加一个f或则F,例如:
CGSizeMake(12.5f,13f);
要显示double类型的值,可使用%f,%e,或%g,它们显示float值所用的格式是相同的.
4.char类型
char类型可存储单个的字符。将字符放入一对括号中就可以得到字符常量。因此,‘a‘.‘3‘和‘;‘都是合法的字符常量.第一个表示字母a,第二个表示字符3,第三个表示分号。第二个并不等同于数字的3.
字符常量‘\n‘(换行符)是一个合法的字符常量。‘\’称为转义字符,用来在NSLog中输出特殊符号。因为反斜杠符号是OC中特殊符号。OC中将字符‘\n‘看作单个的字符,尽管它是由两个字符组成。
如下示例,使用了基本的数据类型:
1 #import <Foundation/Foundation.h> 2 3 int main (int argc,char *argv[]) 4 5 { 6 7 NSAutoreleasePool *pool =[[NSAutorelelasePool alloc]init]; 8 9 int numVar =10;10 11 float floaVar =331.79;12 13 double doubleVar =9.44e+11;14 15 char charVar =‘W‘;16 17 NSLog(@"numVar:=%i",numVar);18 19 NSLog(@"floatVar:=%f",floatVar);20 21 NSLog(@"doubleVar:=%e",doubleVar );22 23 NSLog(@"doubleVar :=%g",doubleVar );24 25 NSLog(@"charVar:=%c",charVar);26 27 [pool drain];28 29 return 0;30 31 }
输出: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。然而计算机只能保存这些数字,这就是计算机的不确定性所致。此处应用了相同的不确定性,所以在内存中不能精确的表示一些浮点值!!