一、数据类型分类
(1)、基本类型:整形,字符型,浮点型(float类型,double类型),枚举型;
(2)、构造类型:数组类型,结构体类型,共用体类型;
(3)、指针类型;
(4)、特殊类型:nil 。
1、基本类型:
字节:一般来说
- char :1
- short int :2
- int :4
- long int :8
- long long :8
- float :4
- double :8
- long double:16
(1)、整形:
①、例如: int a = 013; —>代表的是八进制整数
八进制整型第一位为0, NSLog 的格式符为: %o 显示的八进制不带前导0,%#o 显示的八进制带前导0
②、例如:int a = 0xaf;或者 int a = 0Xaf;—>代表的是十六进制整数
十六进制以0x 开头的整型,NSLog 的格式符为: %x 显示的十六进制不带前导0x,%#x 显示的十六进制带前导0x,若(%X 或%#X) 显示的十六进制用大写
(2)、NSLog输出格式
NSLog的格式如下所示:
- %@ 对象
- %d, %i 整数
- %u 无符整形
- %f 浮点/双字
- %x, %X 二进制整数
- %o 八进制整数
- %zu size_t%p 指针
- %e 浮点/双字 (科学计算)
- %g 浮点/双字
- %s C 字符串
- %.*s Pascal字符串
- %c 字符
- %C unichar
- r%lld 64位长整数
- (long long)%llu 无符64位长整数
- %Lf 64位双字
(3)、字符型
字符型(Character)数据是不具计算能力的文字数据类型,用字母C表示。它包括中文字符、英文字符、数字字符和其他ASCⅡ字符,其长度(即字符个数)范围是0-254个字符。
特点:
- 字符常量只能单括号括起来,不能用双引号或者其他符号;
- 字符常量只能是单个字符,不能是字符串;
- 字符可以是字符集中任意字符。但数字被定义为字符型之后就不能参与数值运算。如’5’和5是不同的,’5’是字符常量,不能参与数值运算。
(4)、浮点型
- 1).十进制数形式
由数码0~ 9和小数点组成。
例如:0.0,.25,5.789,0.13,5.0,300.,-267.8230等均为合法的实数。 - 2).指数形式
由十进制数,加阶码标志“e”或“E”以及阶码(只能为整数,可以带符号)组成。其一般形式为a E n (a为十进制数,n为十进制整数)其值为 a*10,n
如: 2.1E5 (等于2.1*10的5次方), 3.7E-2 (等于3.7*10的-2次方) 0.5E7 (等于0.5*10的7次方), -2.8E-2 (等于-2.8*10的-2次方),
以下不是合法的实数:345 (无小数点) E7 (阶码标志E之前无数字) -5 (无阶码标志) 53.-E3 (负号位置不对) 2.7E (无阶码) - 3)浮点型变量:
实型变量分为两类:单精度型和双精度型,
其类型说明符为float 单精度说明符,double 双精度说明符。在Turbo C中单精度型占4个字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38,只能提供七位有效数字。双精度型占8 个字节(64位)内存空间,其数值范围为1.7E-308~1.7E+308,可提供16位有效数字。
实型变量说明的格式和书写规则与整型相同。
例如:
- float x,y; (x,y为单精度实型量)
- double a,b,c; (a,b,c为双精度实型量)
实型常数不分单、双精度,都按双精度double型处理
(5)、枚举类型
第一种:是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内.
例如:
enum season{
spring,
summer,
fall,
winter
};
enum season myLove = summer;
第二种:定义匿名枚举类型时直接定义变量
例如:
enum {male,female}me,you;
me = male;
you = female;
NSLog(@"%d,%d",me,you);
注意:
- 枚举元素或者枚举常量不能被赋值,实际上,每个枚举常量按他们的定义顺序,一次为0、1、2、3…
- 枚举常量的本质就是无符号整数,因此,枚举值可以用来比较大小
(6)、表达式的自动升级
short->int->long->long long->float->double->long double
二、运算符
算数运算符、赋值运算符、比较运算符、逻辑运算符、位运算符、类型相关运算符。
1、算数运算符
(1)、+:加法运算符
double a = 5.2;
double b = 3.1;
double sum = a + b;
//sum的值为8.3;
NSLog(@"%g",sum);
(2)、-:减法运算符
double a = 5.2;
double b = 3.1;
double sub = a - b;
//sum的值为2.1;
NSLog(@"%g",sub);
(3)、*:乘法运算符
double a = 5.2;
double b = 3.1;
double multiply = a * b;
//multiply的值为16.12;
NSLog(@"%g",multiply);
(4)、/:除法运算符
double a = 5.2;
double b = 3.1;
double div1 = a / b;
int div2 = a / b;
//div1的值为1.67742;
//div2的值为1;
NSLog(@"%g %d",div1,div2);
(5)、%:求余运算符
int a = 5;
int b = 3;
int mod = a % b;
//mod的值为2;
NSLog(@"%d",mod);
(6)、++:自加
- 第一种:
int a = 5;
//让a先执行算数运算,然后自加;
int b = a++ + 6;
//输出a的值为6,b的值为11;
NSLog(@"a = %d b = %d",a,b);
- 第二种:
int a = 5;
//让a先自加,然后执行算数运算;
int b = ++a + 6;
//输出a的值为6,b的值为12;
NSLog(@"a = %d b = %d",a,b);
(7)、–:自减
- 第一种:
int a = 5;
//让a先执行算数运算,然后自减;
int b = a-- + 6;
//输出a的值为4,b的值为11;
NSLog(@"a = %d b = %d",a,b);
- 第二种:
int a = 5;
//让a先自减,然后执行算数运算;
int b = --a + 6;
//输出a的值为4,b的值为10;
NSLog(@"a = %d b = %d",a,b);
注意:自加和自减只能用于操作变量,不能用于操作数值直接量或常量。
(8)、次方、开放、随机数
double a = 3.2;
//求a的5次方,并将计算结果附为b--335.544
double b = pow(a, 5);
//求a的平方根,并将计算结果附为c--1.78885
double c = sqrt(a);
//计算随机数,返回一个0~10之间的伪随机数
double d = arc4random()%10;
//求a的sin函数值,a被当成弧度数---0.0583741
double e = sin(a);
NSLog(@"%g %g %g %g",b,c,d,e);
2、赋值运算符
(1)、=:直接赋值
double pi = 3.14;
NSString *str = @"Objective-C";
(2)另外几种
+=:对于x += y,即对应于x = x + y;
-=:对于x -= y,即对应于x = x - y;
*=:对于x *= y,即对应于x = x * y;
/=:对于x /= y,即对应于x = x / y;
%=:对于x %= y,即对应于x = x % y;
&=:对于x &= y,即对应于x = x & y;
|=:对于x |= y,即对应于x = x | y;
^=:对于x ^= y,即对应于x = x ^ y;
<<=:对于x <<= y,即对应于x = x << y;
>>=:对于x >>= y,即对应于x = x >> y;
3、比较运算符
> :(大于)
>= :(大于或等于)
< :(小于)
<+ :(小于或等于)
== :(等于)
!= :(不等于)
注意:返回值为0或者1;
4、逻辑运算符
- &&(与):必须前后两个操作数都是真才返回真,否则返回假;
- ||(或):只要两个操作数中有一个是真,就可以返回真,否则返回假;
- !(非):只需要一个操作数,如果操作数为真,返回假;如果操作数为假,返回真;
- ^(异或):当两个操作数不同时才返回真,如果两个操作数相同,则返回假。
5、位运算符
(1)&:按位与
(2)|:按位或
(3)~:按位非
(4)^:按位异或
(5)<<:左位移运算符
(6)>>:右位移运算符
NSLog(@"%d",5&9);//将输出1
NSLog(@"%d",5|9);//将输出13
NSLog(@"%d",~-5);//将输出4
NSLog(@"%d",5^9);//将输出12
NSLog(@"%d",5<<2);//将输出20
NSLog(@"%d",-5<<2);//将输出-20
NSLog(@"%d",-5>>2);//将输出-2
提示:所有的数字在计算机底层都是以二进制形势存在的,原码是直接将一个数值换算成二进制数。但计算机以补码的形式保存所有的整数。补码计算规则如下:正数的补码和原码完全相同,负数的补码是其反码加1;反码是对原码按位取反,只是最高位(符号位)保持不变。
6、逗号运算符
int a = (3 * 4,5 > 2);
NSLog(@"%d",a);//a = 1;
a = (a *= 3,5 < 8);
NSLog(@"%d",a);//a = 1;
int x = (a = 3,a = 5,a = 7,a = 9);
NSLog(@"x = %d",x);
7、三目运算符
NSString *str = (/* DISABLES CODE */ (5) > 3)?@"5大于3":@"5不大于3";
NSLog(@"str = %@",str);//str = 5大于3
/* DISABLES CODE */ (5)>3?NSLog(@"5大于3"):NSLog(@"5不大于3");//输出5大于3
8、运算符的结合性和优先级
单目运算符、赋值运算符和三目运算符是从右向左结合的,即从右向左开始运算的。
其他的运算符是从左向右开始运算的。
优先级: