2、数据类型、运算符和表达式

概述

数据类型、运算符和表达式在任何的计算机语言中都比较重 要的,在面向对象的Objective-C语言中,除了常规的基本类型,还有对象类型等。运算符和表达式完全遵守C语言 规范。

数据类型

Objective-C数据类型可以分为:基本数据类型、对象类型和i d类型。
基本数据类型有:int、float、double和char类型。 对象类型就是类或协议所声明的指针类型,例如:
NSAutoreleasePool * pool,其中NSAutoreleasePool是一个类, NSAutoreleasePool *是它指针类型。 id类型可以表示任何类型,一般只是表示对象类型,不表示 基本数据类型,所以刚才的变量pool也可以声明为id pool。

int类型

int类型代表整数,它的十六进制表示方式:0xFFED0D,在使 用NSLog函数中格式化字符串使用%i表示十进制的整数,%o(字母o)表示8进制整数,%#x表示十六进制整数。它的取 值范围是与设备相关的,无法一概而论。

NSLog(@"integerVar = %i", integerVar);

float类型

float类型代表单精度浮点数,要表示float类型浮点数,可以 在数值后面加上f或F,例如:13.5f。float浮点数也可以用科学计数法表示,例如:1.7e4。NSLog函数中格式化字符串:%f 表示浮点数,%e表示科学计数法,%g表示浮点数。

NSLog(@“floatingVar = %f”, floatingVar);

double类型

double类型代表双精度浮点数,与float类型很相似,占用的 字节空间double类型大体上是float类型的两倍。大多数计算机是用64位表示double类型。NSLog函数中格式化字符串,与 float的%f、%e和 %g相同。

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

char类型

char类型代表字符类型,存放点个字符,用单引号引用起来 。例如: ‘A’,如果要表示一些特殊字符,要使用转义字 符“\”。

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,在大部分计算机中代表32位整数,在整数后面 加L(或l)表示,例如:long int numberOfPoints = 131071100L,NSLog函数中格式化字符串使用%li表示;
• long long int可以指定更加宽泛的整数类型,保证变量至 少64位宽度。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,代表的字符与编译器有关,一般也作为无 符合整数使用。

布尔类型和枚举类型

Objective-C还有两种数据类型是以int类型在计算机内部存 储的,它们是:布尔类型和枚举类型。
• 布尔类型是_Bool(别名BOOL),取值范围1或0,其中1可以用 TRUE和YES表示,0可以用FALSE和NO表示。
• 枚举类型,如果需要定义一组相关常量,可以采用枚举类型 ,把这些常量定义成一个类型,例如游戏在上、下、左、右 方向,可以枚举类型:
• enum direction {up,down,left,right}; • 其中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;
      NSLog(@"Enter week number : ");
      scanf("%i", &aweek);
      ... ...
    [pool drain];
    return 0;
}

说明

其中定义了week的枚举类型,函数scanf(“%i”, &aweek)是C 中标准函数库,用于从终端读取键盘输入,%i是指定接收的类型,&aweek是传递aweek的地址给函数,便于接收键盘输 入内容。

数据类型转换

• 按照数据类型占用存储不同可以自动类型转换或强制类型 转换,总的原则是小存储容量数据类型可以自动转换成为大 存储容量数据类型。
• 不同类型数据间按照下面关系的从左到右(从低到高)自 动转换:
• _Bool、char、short int、枚举类型 -> int ->long int- >long long-> float -> double -> long double。

类型转换先后顺序表
 类型转换先后顺序表

实例

• 如果有下面的表示式,其中,f是float类型,i为int类型,l 为long int 类型,s为short int类型,结果是什么类型?
• f * i + l /s
• 运行结果为float类型,这是因为f是float其它的操作数与 float运算其结果就是float类型。

强制类型转换

• 如果遵守类型转换是右到左情况,就需要强制类型转换了 ,强制类型转换语法形式上很简单,就是在数据前面加上(目标类型),但是这种转换是存在风险的,有可能造成数据 的丢失,需要谨慎进行。例如:

long int l = 6666666666;
NSLog(@"l = %li",l);
int i = (int)l;
NSLog(@"i = %i",i);
运行结 果
l = 6666666666
i = -1923267926

实例

int total = 3446;
int n = 6;
float average = total / n;

运行结果 average结果是574

int total = 3446;
int n = 6;
float average = (float)total / n;

average结果是574.333

常量与变量

• Objective-C中声明常量使用关键字const: • const double PI = 3.141592654;
• Objective-C中变量可以分为成员变量、局部变量和全局 变量。

常量与变量

int gCounter;
@interface MyObject : NSObject {
      int counter;
}@end
@implementation MyObject
-(void) print {
    int cter = 0;
    NSLog(@"%i", cter );
}@end

运算符和表达式

运算符可以分成如下几种:
• 算术运算符,+,―,*,/,%,++,――
• 关系运算符,>,<,>=,<=,==,!=
• 位运算符,&,|,^,~ ,>>,<<
• 赋值运算符,+=,―=,*=,/=
• 条件运算符,? :

短路与和短路或

布尔逻辑运算符中有两个比较特殊的运算 符号,“&&”和“||”,其中“&&”为短路与,如果对两个表达式进行计算,若第1个表达式的值为“假”,则与第2个 表达式的值无关,结果肯定为“假”,所以此时第2个表达 式不再计算。
“||”为短路或,如果对两个表达式进行 计算,若第1个表达式的值为“真”,则与第2个表达式的值无关,结果肯定为“真”,所以此时第2个表达式不再计算。

短路与和短路或

int i = 0;
int a = 10;
int b = 9;
if ((a > b) | (i++ == 1)) {
      NSLog(@" a > b");
} else {
      NSLog(@" a < b");
      NSLog(@"i = %i", i);
}
  结果是a > b和i=1 

位运算符

位运算符有如下几个运算符:&,|,^,~ ,>>,<<,其中& 是按位与,|是按位或,^是异或,~是取反,>>是右位移,< <是左位移。

位运算符实例

• 假设有两个二进制数16位整数(short int),a=1001110110011101和b=0011100100111001,则有如下结果 ,它们的运行结果如下:
位运算符实例
条件运算符
• 条件运算符的语法格式为:
• 布尔表达式?返回值1:返回值2
• 当布尔表达式的值为真时,返回表达式1的值,否则返回表达 式2的值。

int i = 70; int i3 =70 NSString *res = i3 > 60 ? @"及格" : @"不及格" ;
NSLog(@"res = i3 > 60 %@ ", res);

结果是“及格”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值