objective-c提供的基本数据类型:int,float,double,char。
Int:
八进制 整型第一位为 0, NSLog 的格式符为: %o 显示的八进制不带前导 0
%#o 显示的八进制带前导0
十六进制 以 0x 开头的整型,NSLog 的格式符为:
%x 显示的十六进制不带前导 0x
%#x 显示的十六进制带前导0x
若(%X 或%#X) 显示的十六进制用大写
Float:
NSLog 的格式符:%f
NSLog 的格式符:%e 科学计数法显示值
NSLog 的格式符:%g 指数的值小于-4 大于 5,采用%e,否则采用%f
十六进制的浮点常量包含前导 0x 或 0X,后面紧跟一个或多个十进制或十六进制数字,再后是p 或 P,最后
是可以带符号的二进制指数。例:0x0.3p10 表示的值为
3/16*2的10次方
注:若无特殊说明,Object-c 将所有的浮点常量看做 double 值,要显示 double 值可使用和 float
一样的格式符。
Char:
NSLog 的格式符:%c
long double 常量写成尾部带有字母 l 或者 L 的浮点常量。1.234e+7L
类型 |
NSLog 格式符 |
||
八进制 |
十六进制 |
十进制 |
|
long int |
%lo |
%lx |
%li |
long long int |
%llo |
%llx |
%lli |
long double |
%Lg |
%Le |
%Lf |
short int |
%ho |
%hx |
%hi |
unsigned short int |
%ho |
%hx |
%hu |
unsigned int |
%o |
%x |
%u |
unsigned long int |
%lo |
%lx |
%lu |
unsigned long long int |
%llo |
%llx |
%llu |
id |
%p |
注:id 类型可以通过类型转化符可以将一般的id 类型的对象转换成特定的对象。
_Bool 处理 Boolean(即 0 或 1)
_Complex 处理复数
_Imaginary
处理抽象数字
键盘输入:
int number;
scanf("%i",&number);
实例变量的初始化值默认为 0
实例变量作用域的指令:
@protected @private @public
@package
实例变量可被该类及任何子类中定义的方法直接访问(默认的情况) 。
实例变量可被定义在该类的方法直接访问,不能被子类定义的方法直接访问。 实例变量可被该类中定义的方法直接访问,也可被其他类或模块中定义的方法访 问。使得其他方法或函数可以通过(->)来访问实例变量(不推荐用) 。
对于 64 位图像,可以在实现该类的图像的任何地方访问这个实例变量。
在类中定义静态变量和 C 一样
voaltile说明符和const 正好相反,明确告诉编译器,指定类型变量的值会改变。(I/O端口)
比如要将输出端口的地址存储在 outPort 的变量中。
volatile char *outPort;
*outPort = 'O';
*outPort = 'N';
这样就可以避免编译器将第一个赋值语句从程序中删除
枚举数据类型、typedef 语法以及数据类型的转换和 C 也是一样。
1.整型 (int) 浮点型 (float, double) 短长整型(short, long)
仍然将代码加载viewDidLoad中[super viewDidLoad]后面。
1 //整型 2 int i = 100; 3 //浮点型 4 float f = 1.1; 5 //双浮点型 6 double d = 2.2; 7 //短整型 8 short int si = 200; 9 //长整型 10 long long int ll = 123324123234123L; 11 12 //输出数据与内存中所占字节数 13 //整型 14 NSLog(@"i = %d size = %lu byte ",i, sizeof(i)); 15 //浮点型 16 NSLog(@"f = %f size = %lu byte",f,sizeof(f)); 17 //双浮点型 18 NSLog(@"d = %e size = %lu byte",d,sizeof(d)); 19 //短整型 20 NSLog(@"si = %hi size = %lu byte",si,sizeof(si)); 21 //长整型 22 NSLog(@"ll = %lli size = %lu byte",ll,sizeof(ll));
结果
013-12-23 11:49:37.324 HelloWorld_20131017[1242:c07] i = 100 size = 4 byte
2013-12-23 11:49:37.324 HelloWorld_20131017[1242:c07] f = 1.100000 size = 4 byte
2013-12-23 11:49:37.324 HelloWorld_20131017[1242:c07] d = 2.200000e+00 size = 8 byte
2013-12-23 11:49:37.325 HelloWorld_20131017[1242:c07] si = 200 size = 2 byte
2013-12-23 11:49:37.325 HelloWorld_20131017[1242:c07] ll = 123324123234123 size = 8 byte
2.字符串 NSString* 与 char*
1 NSString * str5=@"MOMO"; 2 char *c="192745936"; 3 4 const char *change =[str5 UTF8String]; 5 6 NSLog(@"str = %@ size = %lu", str5,sizeof(str5)); 7 NSLog(@"c = %s size = %lu", c, sizeof(c)); 8 NSLog(@"change = %s size = %lu", change, sizeof(change));
输出:
2013-12-23 11:49:37.326 HelloWorld_20131017[1242:c07] str = MOMO size = 4
2013-12-23 11:49:37.327 HelloWorld_20131017[1242:c07] c = 192745936 size = 4
2013-12-23 11:49:37.327 HelloWorld_20131017[1242:c07] change = MOMO size = 4
字符串格式化
使用stringWithFormat 方法来格式化字符串
意思就是将整型 字符型 等等 合并成一个NSString*类型
1 NSString * str6 = [NSString stringWithFormat:@"姓名:%@ 年龄:%d 邮箱:%@" ,@"雨松momo",25,@"xuanyusong@gmail.com"];
NSLog(@"str = %@",str6);
输出:
2013-12-23 11:49:37.328 HelloWorld_20131017[1242:c07] str = 姓名:雨松momo 年龄:25 邮箱:xuanyusong@gmail.com
3.布尔值
宏定义 真为YES 假为NO
因为Objective-C 是C语言的超集 所以在代码中写 true 和false 也是可以运行通过的
这里毕竟是Objective-C 所以还是建议使用YES 和 NO
这里再讲解一下 YES 和 NO:
Object-c 提供了 BOOL 类型, 但这个BOOL 类型和 C++里的并不一样:
在C++里一切非 0 值的东西都 为 true,而为 0 值的为 false。
但是
Object-c 里 1 为 true 并被宏定义为 YES,0 为 false 并被宏定义为 NO。
所以,如果读者写下面的代码,则肯定是错误的:
BOOL areIntsDifferent_faulty(intthing1,int thing2) {
return (thing1-thing2); }
if(areIntsDifferent_faulty(23,5)== YES)
{
}
因为 areIntsDifferent_faulty 方法返回的是两个整数的差,如果这个差不为 1,那么永远不会为 YES。
1 bool a = false; 2 bool b = true; 3 4 if(a == b) 5 { 6 NSLog(@"a与b相等"); 7 } 8 9 if(a != b) 10 { 11 NSLog(@"a与b不等"); 12 } 13 14 15 bool e= YES; 16 bool t =YES; 17 18 if(e == t) 19 { 20 NSLog(@"e与t相等"); 21 } 22 23 if(e!= t) 24 { 25 NSLog(@"e与t不等"); 26 }
输出:
2013-12-23 16:18:02.519 HelloWorld_20131017[1982:c07] a与b不等
2013-12-23 16:18:02.519 HelloWorld_20131017[1982:c07] e与t相等