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

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

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

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

《Objective-C基本的数据类型以及运算符简介》 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);  
参考:
    原文作者:JTR354
    原文地址: https://www.jianshu.com/p/a8beeb425aaa
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞