操作符分类:
算术操作符
移位操作符
位操作符
赋值操作符
单目操作符
关系操作符
逻辑操作符
条件操作符
逗号表达式
下标引用、函数调用和结构成员
算术操作符
+ - * / %
1.对于/操作符,如果两个操作数都是整数,则执行整数除法,如果有一个操作数是浮点数,则执行浮点数除法。
2.%操作符的两个操作数都必须是整数,返回的是整除之后的余数。
移位操作符
<< >>
<< 左移操作符
左边抛弃,右边补0
>> 右移操作符
移位规则分两种:
1.逻辑移位 左边补0;右边抛弃
2.算数移位 左边填充原该值的符号位,右边抛弃(二进制有正负之分)。
位操作符(操作数必须是整数)
& | ^
按照所给数的二进制位进行相应的计算,然后将结果转换为十进制结果输出。
1.& ----> 按位与 按照所给数的二进制位进行与计算,对应的二进制位都为1,结果为1,否则为0
2. | ----> 按位或 按照所给数的二进制位进行或计算,对应的二进制位有一个为1,结果为1,否则为0
3. ^ ---->按位异或 按照所给数的二进制位进行异或计算,对应的二进制位相异为1,否则为0。
#include <stdio.h>
#include <stdlib.h>
int main()
{
char a = 5; //00000101
char b = 9; //00001001
printf("c1 = %d\n", a & b);
printf("c2 = %d\n", a | b);
printf("c3 = %d\n", a ^ b);
system("pause");
return 0;
}
赋值操作符
= 给变量赋值
复合赋值符
+=
-=
*=
/=
%=
>>=
<<=
&=
|=
^=
单目操作符
! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位)
~ 对一个数的二进制按位取反
–前置、后置–
++前置、后置++
* 间接访问操作符(解引用操作符)
(类型) 强制类型转换
1.前置++和- -:
#include <stdio.h>
int main()
{
int a = 1;
int x = ++a;
//先对a进行自增,然后对使用a,也就是表达式的值是a自增之后的值,x为2。
int y = --a;
//先对a进行自减,然后对使用a,也就是表达式的值是a自减之后的值,y为0;
return 0;
}
2.后置++和–
#include <stdio.h>
int main()
{
int a = 1;
int x = a++;
先对a先使用,再增加,这样x的值是1,之后a变成2
int y = a--;
先对a先使用,再自减,这样y的值是1,之后a变成0
return 0;
}
关系操作符
=
<
<=
!= 不相等
== 相等
逻辑操作符
&& 逻辑与
|| 逻辑或
条件操作符
exp1 ? exp2 : exp3
逗号表达式
exp1, exp2, exp3, …expN
逗号表达式,就是用逗号隔开的多个表达式。 逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。
下标引用、函数调用和结构成员
1.[ ] 下标引用操作符
操作数:一个数组名 + 一个索引值
int arr[10]; //创建数组
arr[5] = 8; //使用下标引用操作符。
[ ]的两个操作数是arr和5。
2.( ) 函数调用操作符 接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。
#include <stdio.h>
void test1()
{
printf("hello\n");
}
void test2(const char *str)
{
printf("%s\n", str);
}
int main()
{
test1(); //使用()作为函数调用操作符
test2("hello world"); //使用()作为函数调用操作符
return 0;
}
3.访问一个结构的成员
. 结构体.成员名
-> 结构体指针->成员名
#include <stdio.h>
typedef struct Peo
{
char name[10];
int age;
char sex[5];
}peo;
void set_age1(struct Peo peo)
{
peo.age = 18;
}
void set_age2(struct Peo* pPeo)
{
pPeo->age = 18;//结构成员访问
}
int main()
{
struct Peo Peo;
struct Peo* pPeo = &Peo;//结构成员访问
Peo.age = 20;//结构成员访问
set_age1(Peo);
pPeo->age = 20;//结构成员访问
set_age2(pPeo);
return 0;
}