Objective-C基本的数据类型以及运算符简介

OC是增强了C的特性,所以变量和基本数据类型上基本与C一致。
在OC中变量命名有如下规则:

  • 由字母、数字、下划线、$符号组成
  • 必须以字母、下划线、$符号开头
  • 大小写敏感

在OC中定义变量的时候不能使用OC的保留字,OC的保留字如下:


image
  • OC中有如下基本数据类型:
    int:声明整型变量
    double:声明双精度变量
    float:声明浮点型变量
    BOOL:声明布尔型变量
    char:声明字符型变量
    id:通用的指针类型
    enum:声明枚举类型
    long:声明长整型变量或函数
    short:声明短整型变量或函数
    signed:声明有符号类型变量
    struct:声明结构体变量
    union:声明共用体(联合)数据类型
    unsigned:声明无符号类型变量
    void:声明函数无返回值或无参
  • 数据类型格式化字符:(数据类型 oc关键字 格式说明引导符)
    整型 int %d.%i
    短整型 short int %hd.%hi
    长类型 long int %ld.%li
    无符号短整型 unsigned int %u
    无短整型 unsigned short %hu
    无符号长整型 unsigned long %lu
    浮点型 float %f
    双精度型 double %f
    长双精度型 long double %lf
    字符型 char %c

常用的一些占位符:

%@:字符串占位符

%d:整型

%ld:长整型

%f:浮点型

%c:char类型

%%:%的占位符

尽管有那么多的占位符,但是好像没有发现BOOL型的数据的占位符,这也是比较纠结的地方,看了一下别人是怎么解决这个问题的

BOOL studyBool = YES;

    NSLog(@"打印BOOL型数据

%@",studyBool?@"YES":@"NO");//;//)

打印BOOL型数据YES

    NSLog(@"打印BOOL型数据%d",studyBool);//打印BOOL型数据1

    BOOL alsoBool = NO;

    NSLog(@"打印BOOL型数据

%@",alsoBool?@"YES":@"NO");//;//)

打印BOOL型数据NO

    NSLog(@"打印BOOL型数据%d",alsoBool);//打印BOOL型数据0

详细介绍:**********************************************************

%@: Objective-C对象,印有字符串返回descriptionWithLocale:如果于的话,或描述相反.CFTypeRef工作对象,返回的结果的CFCopyDescription功能.(这个翻译有问题建议按照自己的理解方式理解)。

%%: 为'%'字符;

%d,%D,%i: 为32位整型数(int);

%u,%U: 为32位无符号整型数(unsigned int);

%hi: 为有符号的16位整型数(short);

%hu: 为无符号的16位整型数(unsigned shord);

%qi: 为有符号的64位整型数(long long);

%qu: 为无符号的64位整型数(unsigned long long);

%x: 为32位的无符号整型数(unsigned int),打印使用数字0-9的十六进制,小写a-f;

%X: 为32位的无符号整型数(unsigned int),打印使用数字0-9的十六进制,大写A-F;

%qx: 为无符号64位整数(unsigned long long),打印使用数字0-9的十六进制,小写a-f;

%qX: 为无符号64位整数(unsigned long long),打印使用数字0-9的十六进制,大写A-F;

%o,%O: 为32位的无符号整数(unsigned int),打印八进制数;

%f: 为64位的浮点数(double);

%e: 为64位的浮点数(double),打印使用小写字母e,科学计数法介绍了指数的增大而减小;

%E: 为64位的浮点数(double),打印科学符号使用一个大写E介绍指数的增大而减小;

%g: 为64位的浮点数(double),用%e的方式打印指数,如果指数小于4或者大于等于精度,那么%f的风格就会有不同体现;

%G: 为64位的浮点数(double),用%E的方式打印指数,如果指数小于4或者大于等于精度,那么%f的风格就会有不同体现;

%c: 为8位的无符号字符%c(unsigned char),通过打印NSLog()将其作为一个ASCII字符,或者,不是一个ASCII字符,八进制格式\ddd或统一标准的字符编码的十六进制格式\udddd,在这里d是一个数字;

%C: 为16位Unicode字符%C(unichar),通过打印NSLog()将其作为一个ASCII字符,或者,不是一个ASCII字符,八进制格式\ddd或统一标准的字符编码的十六进制格式

[\udddd](file:///udddd)

,在这里d是一个数字;

%s: 对于无符号字符数组空终止,%s系统中解释其输入编码,而不是别的,如utf-8;

%S: 空终止一系列的16位Unicode字符;

%p: 空指针(无效*),打印十六进制的数字0-9和小写a-f,前缀为0x;

%L: 在明确规定的长度下,进行修正,下面的一批数据a,A,e,E,f,F,g,G应用于双精度长整型的参数;

%a: 为64位的浮点数(double),按照科学计数法打印采用0x和一个十六进制数字前使用小写小数点p来介绍指数的增大而减小;

%A: 为64位的浮点数(double),按照科学计数法打印采用0X和一个十六进制数字前使用大写字母小数点P界扫指数的增大而减小;

%F: 为64位的浮点数(double),按照十进制表示法进行打印;

%z: 修改说明在%z长度以下d,i,o,u,x,X适用于某一指定类型的转换或者适用于一定尺寸的整数类型的参数;

%t: 修改说明在%t长度以下d,i,o,u,x,X适用于某一指定类型或一定尺寸的整数类型的转换的参数;

%j: 修改说明在%j长度以下d,i,o,u,x,X适用于某一指定类型或一定尺寸的整数类型的转换的参数。


常用的格式化输出:

  • %i和%d 无差别,%i是老式写法,%d是新式写法而已
  • %.2f 表示小数点后面数字保留两位
  • %4i 表示数字位数宽度。如数字1,那么结果是1,前面保留三位数
  • %04i 相比上面,是用0填补空位,即数字是1,那么结果是0001。这个在IOS开发中开帧动画可能有用,系列图片编号是001.png、002.png、003.png等。
  • %-4i 是有对齐,数字1,输出结果是1,后面保留三位。
#import <Foundation/Foundation.h>  
  
int main(int argc, const char * argv[])  
{  
    @autoreleasepool {  
        //保留字是不能定义为变量名的,例如下面的int、float等就不能作为变量名
        int i = 2;
        float f = 2.3f;
        double d = 2.3e12;
        char c = 'a';
        
        BOOL flag = true;
        NSLog(@"flag:%d",flag);
        //输出数据
        NSLog(@"i : %d",i);
        NSLog(@"f : %f 截取后 : %.2f",f,f);
        NSLog(@"d : %e 截取后 : %.2e",d,d);
        NSLog(@"c : %c , %d",c ,c );
        
        //数据转换
        //数据类型容量大的转成小的可能会丢失精度
        int i2 = (int)f;
        float f2 = (float)i ;
        
        NSLog(@"数据转换");
        NSLog(@"i2 : %d",i2);
        NSLog(@"f2 : %f",f2);
        
        int i3 = 0xffffff;
        NSLog(@"i3外面=%d",i3);
        NSLog(@"变量的作用域");
        if(YES){
            int i3 = 2;
            NSLog(@"i3 : %d",i3);
        }
    }  
    return 0;  
}   
/*
2017-12-07 10:31:16.517965+0800 function_func[35565:5466381] flag:1
2017-12-07 10:22:41.180474+0800 function_func[35464:5432868] i : 2
2017-12-07 10:22:41.181330+0800 function_func[35464:5432868] f : 2.300000 截取后 : 2.30
2017-12-07 10:22:41.181807+0800 function_func[35464:5432868] d : 2.300000e+12 截取后 : 2.30e+12
2017-12-07 10:22:41.181894+0800 function_func[35464:5432868] c : a , 97
2017-12-07 10:22:41.181944+0800 function_func[35464:5432868] 数据转换
2017-12-07 10:22:41.181960+0800 function_func[35464:5432868] i2 : 2
2017-12-07 10:22:41.181986+0800 function_func[35464:5432868] f2 : 2.000000
2017-12-07 10:22:41.182003+0800 function_func[35464:5432868] i3外面=16777216
2017-12-07 10:22:41.182011+0800 function_func[35464:5432868] 变量的作用域
2017-12-07 10:22:41.182018+0800 function_func[35464:5432868] i3 : 2
Program ended with exit code: 0
*/

id类型的介绍

id是一种通用的对象类型,她可以用类存储属于任何类的对象,可以理解为万能指针
***在id的定义中,已经包装好了*号,id指针只能指向os的对象
编译器看到id以后,认为是动态类型,不在检查类型

  • NSObject 和id都可以指向任何对象
    NSObject对象会惊醒编译时检查(需要强制类型转换)
    id不需要强制类型转换,id可以直接使用

  • instancetype与id异同
    相同点
    都可以作为方法的返回类型
    不同点
    1)instancetype可以返回和方法所在类型相同的对象,id只能返回位置类型的对象
    2)instancetype只能作为返回值,不能像id那样作为参数

#import <Foundation/Foundation.h>
#import"Dog.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        Animal *ani = [[Animal alloc]init];
        [ani run];//Animal在跑
        Animal *ani2 = [[Dog alloc]init];
        [ani2 run];//Dog 在跑
        
        NSObject *ob = [[Animal alloc]init];
        [(Animal*)ob run];//Animal在跑
        
        ob = [[Dog alloc]init];
        [(Dog*)ob run]; //Dog在跑
        
        //注意id使用
        //id类型的使用
        id obj2;
        obj2 = ani;
        [obj2 run]; //Animal在跑
    }
    return 0;
}

运算符介绍

  • sizeof() 是计算数据以及数据类型占用内存大小的运算符。
    • 如int num1 = sizeof(10) 或 int num1 = sizeof 10
    • 或先定义 float a =10.5 ,然后int num1 = sizeof(a) 或 int num1 = sizeof a
    • 但在计算数据类型是括号不能省略,即 int num1 = sizeof(float);
  • 逗号运算符:是输出最好一个运算结果,如 int b = (a=5,a++,a*6);结果b=36;
  • 关系运算符:真返回1,假返回0,且>、>=、<、<=的优先级高于==、!=,如果平级有时候从左向右运算。关系运算符优先级小于+-*/
  • 逻辑运算符:与或非&&、||、!。注意短路效应。

宏定义

#define RGBAlphaWrong(r, g, b, alpha)  [[UIColor colorWithRed:(r) / 255.0 green:(g) / 255.0 blue:(b) / 255.0 alpha:(alpha) ] set]

 RGBAlphaWrong(85, 26, 19, 0.5);  
参考:
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343