今天老何与大家分享Objective-C中的数据类型,从一个大家相对感兴趣的话题聊起吧,随着智能手机与网络的普及,大家都办理了流量套餐,每到月底大家也非常关心有没有流量了?费用是如何被扣掉的?
好,让我们带着问题了解2个概念。
1、数据
数据是信息的表现形式和载体,可以是符号、文字、数字、图像、语音、视频等。
手机/电脑上安装的软件,Word文档、PPT文档,短信、微信,图片、视频等等都是数据。
之所以我们使用手机会有流量费用,是因为发送和接收了数据(如在线听歌、发送微信、查看朋友圈,这些都是走数据流量的,如同用水电一样),运营商是计费的,比如联通(0.0003元/kb),这里提到数据单位kb,来接着看第二个概念。
2、数据单位
数据是有单位的(如尺寸有单位米,厘米、毫米等,它们之间有换算关系,1米=100厘米,1厘米=10毫米),从小到大依次是比特(Bit)、字节(Byte)、千字节(KB)、兆字节(MB)、吉字节(GB)、太字节(TB)......它们之间的换算关系为:
1B=8bit
1 KB = 1024 B
1 MB = 1024 KB
1 GB = 1024 MB
1 TB = 1024 GB
......
> 比特(Bit):比特是计算机中存储数据的最小单位,指二进制数中的一个位数,其值为“0”或“1”。
> 字节(Byte):字节是计算机存储容量的基本单位,一个字节由8位二进制数组成,如10011000,在计算机内部,一个字节可以表示一个数据,也可以表示一个英文字母,两个字节可以表示一个汉字。
> 其他KB,MB、GB、TB......每一个级别都是前面的乘以1024。
了解完上面概念后,再回答我们前面的问题,如果你通过手机在线看一个视频,为100M(现在文件都很大,M即MB,按照联通费用标准需换算成KB),那么花费=100Mx1024x0.0003元/KB≈30元,自我感觉hei不hei:),独此三家,别无选择。
OK,进入我们的今天主题“数据类型”
3、数据类型
数据除了有单位,也是有类型的,数据类型是对数据的分类,每种数据类型都具有独特的特征、不同的分配空间(最大位数/字节数不同)与相应的操作功能(举个例子:房子有别墅、住宅、办公楼等分类,产权不一,大小不一,功能不一,但都是房子)
Objective-C中分成三种数据类型,一是基本数据类型,二是引用数据类型(也就是对象类型,继承NSObject,包括系统内置的类和自定义的类对象,如NSString),三是其他数据类型(OC中非以上两种类型的,都放到这里)
一、基本数据类型
/*
1、整数类型:short、int、long
用来表示一个整数
short短整型、int 整型、long 长整型
*/
/*
(1)、int 整型:一般占4个字节(32位)
取值范围:-2,147,483,648~2,147,483,647(-2^31~2^31-1)
默认值:0
NSLog函数中格式化字符串:%i表示
*/
int i = 18000;
NSLog(@"int i 的值为:%i",i);
/*
(2)、short短整型:占2个字节(16位)
取值范围:-32768~32767(-2^15~2^15-1)
默认值:0
NSLog函数中格式化字符串:%hi表示
*/
short si = 1800;
//short int si2 = 1800;
NSLog(@"short si 的值为:%hi",si);
/*
(3)、long 长整型 :占8个字节(64位)
取值范围:-9,223,372,036,854,775,808~9,223,372,036,854,775,807(-2^63~2^63-1)
默认值:0L,后面有一个L或l
NSLog函数中格式化字符串:%li表示
*/
long li = 180000l;
// long int li2 = 180000l;
NSLog(@"long li 的值为:%li",li);
/*
2、浮点类型:float、double
float单精度浮点类型、double双精度浮点类型
Objective-C用浮点型表示实数,简单的说就是带有小数的数据。
*/
/*
(4)、float 长单精度浮点类型 :占4个字节(32位)
默认值:0.0,后面要跟一个f或F表示
NSLog函数中格式化字符串:%f表示(%e表示科学计数法(指数形式),%g表示浮点数,自动选择前面合适的)
浮点数可以限定宽度。0.2f分别对应前面位数和小数点后面位数,这里代表后面显示的是2位
*/
float f = 3.14f;
NSLog(@"float f 的值为:%0.2f",f);
/*
(5)、double 双精度浮点类型 :占8个字节(64位)
浮点型的默认类型
默认值:0.0, 浮点数不添加默认代表双精度
NSLog函数中格式化字符串:%f表示(%e表示科学计数法(指数形式),%g表示浮点数,自动选择前面合适的)
*/
double d = 3.14;
NSLog(@"double d 的值为:%g",d);
/*
(6)、char 字符类型 :占1个字节(8位)
存放单个字符,用单引号引用起来
NSLog函数中格式化字符串:%c表示
*/
char c = 'a';
NSLog(@"char c 的值为:%c",c);
二、引用数据类型
这里先讲一个常用的NSString类型,其他的后续陆续讲解。
/*
(1)、NSString 字符串类型
char字符型仅表示一个字符,多个字符要用NSString,并且要以@开头
默认值:nil
NSLog函数中格式化字符串:%@表示
*/
NSString *name = @"zhangsan";
NSLog(@"NSString name 的值为:%@",name);
三、其他数据类型
这里先讲一个bool类型,其他的后续陆续讲解。
/*
(1)、bool 类型 :
有两个值:1或0,其中1可以用TRUE和YES表示,0可以用FALSE和NO表示。
用作标记或条件判断
NSLog函数中格式化字符串:%i表示
*/
bool hasChecked=TRUE;
NSLog(@"bool hasChecked 的值为:%i",hasChecked);
4、数据类型转换
不同数据类型的数据是可以转换的,分为自动数据类型转换和强制数据类型转换
/* 1、自动数据类型转换
按照数据类型占用存储不同可以自动类型转换或强制类型转换,总的原则是小存储容量数据类型可以自动转换成为大存储容量数据类型。
不同类型数据间 按照下面关系的从左到右(从低到高)自动转换:
Bool、char、short int、enum -> int ->long int->long long-> float -> double -> long double。
*/
int height = 170;
float fHeight=height;
NSLog(@"int 自动转换成f的值为: %f",fHeight);
/*
2、强制数据类型转换
如果类型转换是右到左情况,就需要强制类型转换了,转换方法就是在数据前面加上(目标类型),
但是这种转换是存在风险的,有可能造成数据的丢失,需要谨慎进行。
*/
double weight=23.56;
int iWeight=(int)weight;
NSLog(@"double 强制转化成int的值为:%i",iWeight);
5、变量与常量
最后补充一些知识,之前我们使用的代码格式都为
int i = 18000;
这个是什么呢?格式为:变量数据类型 变量名 = 变量值
/*
一、变量
1、概念:是Objective-C程序的一个基本存储单元,变量是由一个标识符及一个可选的初始值组合定义。
定义规则为:
1:必须以字母、下划线“_”、或“$”符号开头
2:可以包括数字、区分大小写
3:不能使用Objective-C语言的关键字,例如int、float、public等(更多见附注1Objective-C关键字)
变量的值是可以改变的
2、变量定义格式:
变量数据类型 变量名;
例如 int age;
*/
//1,变量先定义,在初始化
int score;
score=200;
//2,定义的时候直接初始化
float heightf=180.6f;
//3,变量的修改(可多次改变)
double money=1234.56;
money=3456.78;
money=5678.9;
//4,变量的传递修改(从一个变量传递给另一个变量)
int age=6;
int ageb=age;
NSLog(@"the ageb is %i",ageb);
/*
二、常量
常量是变量中的一个特例,用const关键字修饰,常量的值是不可以修改的
对常量命名的定义规则:建议尽量全部大写,并用下划线将词分开
*/
//5,定义常量,常量不能修改,仅能定义时初始化
const float PI=3.1415f;
// PI = 3.14159f;
NSLog(@"变量分数值为:%i,变量身高值为:%0.1f,存款为:%g,年龄为%i,常量PI为:%0.4f",score,heightf,money,ageb,PI);
6、运行结果
保存程序并运行,结果如下:
附注:
1、OC关键字
OC官方使用的特定标识,代表特殊含义,如int,代表整型数据类型
网友评论