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,可在终端上用八进制显示整型值:
例:
在上面例子的情况下,输出的八进制值不带有前导0,输出带有0的写法如下:
第二种情况:
如果整形常量以0和字母x(x无论大写还是小写)开头,那么这个值都将采用十六进制(即以16为基数)计数法里表示。紧跟在字母x后面的是十六进制的的数字,它可由0到9之间的任意数字或a到f(A到F)之间的字母组成。字母表示的数字分别为10到15。因此,给一个名为rgbColor的整型常量指派一个十六进制的值FFEF0D,可以使用以下语句:
格式符号%x表示显示一个十六进制的值,该值不会带有前导0x,都是用a--f的小写字母表示十六进制的数字,需要带有前导0x,使用格式字符%#x表示:
不管是字符,浮点,整数,都有与其对应的值域,这个值域与存储特定类型的值而分配到的内存量有关,一般在语言当中没有规定这个量的大小,它依托于所运行的计算机,所以叫做设备的相关量.如一个整数可在计算机上占用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,例如:
要显示double类型的值,可使用%f,%e,或%g,它们显示float值所用的格式是相同的.
4.char类型
char类型可存储单个的字符。将字符放入一对括号中就可以得到字符常量。因此,'a'.'3'和';'都是合法的字符常量.第一个表示字母a,第二个表示字符3,第三个表示分号。第二个并不等同于数字的3.
字符常量'\n'(换行符)是一个合法的字符常量。因为反斜杠符号是OBJ中特殊符号。OBJ中将字符'\n'看作单个的字符,尽管它是由两个字符组成。
如下示例,使用了基本的数据类型:
输出: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。然而计算机只能保存这些数字,这就是计算机的不确定性所致。此处应用了相同的不确定性,所以在内存中不能精确的表示一些浮点值!!
在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。然而计算机只能保存这些数字,这就是计算机的不确定性所致。此处应用了相同的不确定性,所以在内存中不能精确的表示一些浮点值!!
相关文章推荐
- Objective-C学习笔记三:基本数据类型和表达式
- Objective-C 学习笔记 4 数据类型和表达式
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第四章 数据类型和表达式
- Objective-C 2.0 学习笔记三(数据类型和表达式)
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第四章 数据类型和表达式 课后练习题 4-10
- 黑马程序员——Objective-C程序设计(第4版)学习笔记之04-数据类型和表达式——黑马 IOS 技术博客
- Objective-C学习笔记12:高级数据类型一
- objective-c学习笔记第七章《objective-c 数据类型和变量与java中的区别》
- Objective-C学习笔记(五)——数据类型与限定词
- iOS-Objective-C 学习笔记一:数据类型
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第十章 变量和数据类型
- 黑马程序员——Objective-C程序设计(第4版)学习笔记之10-变量和数据类型——黑马 IOS 技术博客
- Objective-C学习笔记(四)-数据类型和循环结构
- Objective-C学习笔记(五)——数据类型与限定词
- objective-c学习笔记第二章《objective-c中类型,表达式与java中的区别》
- C++的学习笔记(第二章:基本数据类型与表达式)
- Objective-C学习笔记--一些有用的数据类型
- 【Objective-C学习笔记】变量和基本的数据类型
- PHP学习笔记(23)PHP的数据类型与常量使用(24)PHP的运算符与表达式
- Programming in Objective-C 学习笔记04——变量和数据类型