Objective-C之成魔之路【3-数据类型】
来源:互联网 发布:问道手游服务器源码 编辑:程序博客网 时间:2024/04/28 13:42
郝萌主倾心贡献,尊重作者的劳动成果,请勿转载。
如果文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额随意,重在心意^_^
我要捐赠: 点击捐赠
Cocos2d-X源码下载:点我传送
数据类型、 运算符和表达式在任何的计算机语言中都比较重要的,
在面向对象的Objective-C语言中, 除了常规的基本类型, 还有对象类型等。
运算符和表达式完全遵守C语言规范。
Objective-C数据类型可以分为:基本数据类型、 对象类型和id类型。
基本数据类型有: int、 float、 double和char类型。
对象类型就是类或协议所声明的指针类型, 例如:
NSAutoreleasePool * pool, 其中NSAutoreleasePool是一个类,
NSAutoreleasePool *是它指针类型。
id类型可以表示任何类型, 也就是说id可存储任何类型的对象。
一般只是表示对象类型, 不表示基本数据类型,从某种意义上说,它是一般对象类型。
所以刚才的变量pool也可以声明为id pool。
id类型是Objective-C中十分重要的特性,它是多态和动态绑定的基础。
基本数据类型
1、int类型
int类型代表整数, 它的十六进制表示方式: 0xFFED0D,
在使用 NSLog函数中格式化字符串使用 %i表示十进制的整数,
%o(字母o) 表示8进制整数, %#x表示十六进制整数。
NSLog(@"integerVar = %i", integerVar);
整数常量由一个或多个数字的序列组成。
它的取值范围是与设备相关的, 无法一概而论。
也就是要注意设备或机器相关量。即我们通常说的int是32位还是64位取决于CPU的总线宽度。
在Mac OS X中,提供了选择应用程序是在32位还是64位下编译。
在前一种情况下,一个int占用32位;在后一种情况下,一个int占用64位。
2、float类型
声明为float类型的变量可以存储包含小数位的值。
float类型代表单精度浮点数, 要表示float类型浮点数, 可以在数值后面加上f或F, 例如:13.5f。
float浮点数也可以用科学计数法表示, 例如: 1.7e4。
NSLog函数中格式化字符串: %f表示浮点数, %e表示科学计数法, %g表示浮点数。
float floatingVar = 3.141592;NSLog(@"floatingVar = %f", floatingVar);
这里的输出结果为floatingVar =3.141592
这说明实际显示的值是由具体使用的计算机系统决定的。
出现这种不准确值的原因在于,计算机内部使用了特殊的方式表示数字。
同样的不确定性也出现在:在计算机内存中不能精确地表示一些浮点值。
所以,我们在进行float或double的值比较时,一定要考虑这一点。
这也是为什么float值和0相等的比较需要写成下面表达式的原因:
if(x>0.000001&&x<-0.000001)
3、double类型
double类型代表双精度浮点数, 与float类型很相似, 占用的字节空间double类型大体上是float类型的两倍。
大多数计算机是用 64位表示double类型。
NSLog函数中格式化字符串, 与float的%f、 %e和 %g相同。
NSLog(@"doubleVar = %e", doubleVar);
4、char类型
char类型代表字符类型,char变量可存储单个字符。将字符放入一对单引号中就能得到字符常量。如:’a‘。
不要把字符常量和c语言风格的字符串混为一谈,字符常量是放在单引号中的字符,而字符串则是放在双引号中的任意个数的字符。
如果要表示一些特殊字符, 要使用转义字符“\” 。
字符常量’\n‘(即换行符)是一个合法的字符常量,尽管它似乎与前面提到的规则矛盾。
NSLog(@"charVar = %c", charVar);
下面举个例子来演示以上类型的使用:
#import <Foundation/Foundation.h>int main (int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];int integerVar = 100;float floatingVar = 331.79;double doubleVar = 8.44e+11;char charVar = 'W';NSLog(@"integerVar = %i", integerVar);NSLog(@"floatingVar = %f", floatingVar);NSLog(@"doubleVar = %e", doubleVar);NSLog(@"doubleVar = %g", doubleVar);NSLog(@"charVar = %c", charVar);[pool drain]; return 0;}
数据类型限定词
Obejctive-C中数据类型可以在int、 float、 double和char类
前面加上限定词, 限定词有: long、 long long、 short、
unsigned和signed, 这些限定词从而增强了基本类型。
• long int,
如果直接把限定词long放在int声明之前,那么所声明的整型变量在某些计算机上具有扩展的值域。
long变量的具体范围也是由计算机系统决定的。
在大部分计算机中代表32位整数, 在整数后面加L(或l) 表示,
例如: long int numberOfPoints =131071100L,
NSLog函数中格式化字符串使用 %li表示;
NSLog函数中格式化字符串使用 %lli表示;
• long double , 可以指定更加宽泛的double类型,
要显示这个可以在尾部使用 L(大小写) 表示, 1.234e+7L。
NSLog函数中格式化字符串使用 %Lf、 %Le和%Lg表示;
• short int用来指定存放相对小的整数, 节约内存,
一般是占用 int类型的一半。 大部分计算机是16位;
• unsigned int, 告诉编译器只是接受整数,
在数值之后放字母u(或U) 表示, 例如: 0x00ffU;
编写整数时候, 可以将字母u(或U) 和l(或L) 组合起来,
例如: 20000UL;
• signed char, 代表的字符与编译器有关, 一般也作为无符合整数使用。
•布尔类型是_Bool(别名 BOOL), 取值范围1或0,
•枚举类型,如果需要定义一组相关常量, 可以采用枚举类型, 把这些常量定义成一个类型,
其中up从0开始, down是1, 依次类推加1
#import <Foundation/Foundation.h>int main (int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];enum week { Mon, Tue, Wed, Thu, Fri, Sat, Sun};int days,aweek; //aweek = 0;NSLog(@"Enter week number : ");scanf("%i", &aweek);switch (aweek) {case Mon:break;case Tue:break;case Wed:break;case Thu:break;case Fri:break;case Sat:days = 5;break;case Sun:days = 6;break;default:NSLog(@"bad week number");days = -1; }if (days !=0) {NSLog(@"Number of days is %i", days);} [pool drain]; return 0;}
其中定义了week的枚举类型,
不同类型数据间按照下面关系的从左到右(从低到高) 自动转换:
_Bool 、 char、 short int、 枚举类型 -> int ->long int->long long-> float -> double -> long double。
数据类型转换举例:
如果有表示式f * i + l /s, 其中, f是float类型, i 为int类型, l
为long int 类型, s为short int类型, 结果是什么类型?
答案:运行结果为float类型,
这是因为f是float其它的操作数与float运算其结果就是float类型。
NSLog(@"l = %li",l );
int i = (int)l;
NSLog(@"i = %i",i );
l = 6666666666
i = -1923267926
int n = 6;
float average = total / n;
运行结果:
int total = 3446;
int n = 6;
float average = (float) total / n;
运行结果:
在Objective-C中,任何数字、单个字符和字符串通常都称为常量。
完全由常量值组成的表达式叫常量表达式。
•const double PI = 3.141592654;
举例如下:
@interface MyObject : NSObject {
int counter;
}@end
@implementation MyObject
-(void) print {
int cter = 0;
NSLog(@"%i", cter );
}@end
gCounter:全局变量;
counter : 成员变量;
cter : 局部变量。
更多了解:
基本数据类型表:
类型
常量实例
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,-200l,0xffffL
%li,%lx,%lo
Unsigned long int
12UL,100ul,0xffeeUL
%lu,%lx,%lo
Long long int
0xe5e5c5e5LL,500ll
%lli,%llx,%llo
Unsigned long long int
12ull,0xffeeULL
%llu,%llx,%llo
Float
12.34f,3.1e-5f,
%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
NSLog的定义
NSLog定义在NSObjCRuntime.h中,如下所示:
void NSLog(NSString *format, …);
基本上,NSLog很像printf,同样会在console中输出显示结果。
不同的是,传递进去的格式化字符是NSString的对象,而不是chat *这种字符串指针。
示例:
NSLog可以如下面的方法使用:
NSLog (@"this is a test");
NSLog (@"string is :%@", string);
NSLog (@"x=%d, y=%d", 10, 20);
但是下面的写法是不行的:
int i = 12345;
NSLog( @"%@", i );
原因是, %@需要显示对象,而int i明显不是一个对象,要想正确显示,要写成:
int i = 12345;
NSLog( @"%d", i );
NSLog格式:
NSLog的格式如下所示:
%@ 对象
%d, %i 整数
%u 无符整形
%f 浮点/双字
%x, %X 二进制整数
%o 八进制整数
%zu size_t
%p 指针
%e 浮点/双字 (科学计算)
%g 浮点/双字
%s C 字符串
%.*s Pascal字符串
%c 字符
%C unichar
%lld 64位长整数(long long)
%llu 无符64位长整数
%Lf 64位双字
int 类型
如果整型值的第一位是0,那么这个整数将用八进制表示,在NSlog调用的格式符号:
%o 显示的八进制值不带有前导0
%#o 显示的八进制值带有前导0
如果整型常量以0x或0X开头,那么这个整数将用十六进制表示,在NSlog调用的格式符号:
%x 显示不带前导0x,并用a-f之间的小写字符表示十六进制
%#x 显示带前导0x,并用a-f之间的小写字符表示十六进制
%X 显示不带前导0x,并用a-f之间的小写字符表示十六进制
%#X 显示带前导0x,并用a-f之间的小写字符表示十六进制
float 类型
显示浮点值,用NSlog转换字符 %f
用科学计数法显示浮点值,用NSlog转换字符 %e
%g 充许NSlog确定使用常用的浮点计数显示还是使用科学计数法显示浮点值。(如果该值小于-4或大于5,采用%e科学计数法表示;否则采用%f浮点计数法显示)
- Objective-C之成魔之路【3-数据类型】
- objective-c 之数据类型和表达式
- Objective-C语法之基本数据类型
- Objective-C语法之基本数据类型
- Objective-C语言学习之数据类型
- Objective-C语法之基本数据类型
- 2,Objective-C语法之基本数据类型
- Objective-C语法之基本数据类型
- Objective-C语法之基本数据类型
- Objective-C语法之基本数据类型
- 1、Objective-C语法之基本数据类型
- Objective-C研究之常用数据类型
- Objective-C语法之基本数据类型
- iOS objective-c之-5:数据类型
- Objective-C语法之基本数据类型
- Objective-C之成魔之路【2-Objective-C 编程】
- Objective-C之成魔之路【1-Objective-C特点】
- Objective-C之成魔之路【0-序章】
- iOS_第3方类库_EGOImageView异步加载网络图片
- android基础笔记——android动画效果:淡入淡出
- 可变长度数据的管道实现方法
- Cocos2d-x的Android工程之Android.mk与Application.mk分析
- C/C++:结构体指针
- Objective-C之成魔之路【3-数据类型】
- uboot学习之路开始
- 贪心算法概述
- ubuntu下Pycharm安装及配置
- git配置文件读取顺序
- 软件工程——初识文档
- (二)线程同步_2---在同步代码块中使用条件
- 程序猿之--C语言细节4(数组及指针操作)
- 网页复制 打印 功能屏蔽