算术操作符
移位操作符
位操作符
赋值操作符
单目操作符
关系操作符
逻辑操作符
条件操作符
逗号表达式
下标引用,函数调用和结构成员
1.算数操作符
+ - * / %
2.移位操作符
>>右移 <<左移
右移操作符,移动的是二进制位
右移操作符:1.算术右移 2.逻辑右移
算术右移:右边丢弃,左边补原符号位
逻辑右移:右边丢弃,左边补0
右移一位有除二的效果
左移操作符
左边丢弃,右边补0
左移有乘2的效果
对于移位操作符,不要移动负数位,这个是标准未定义的
例如int num = 10
num>>1;//不能这样移动负数位
3.位操作符
&//按位与
| //按位或
^ //按位异或
他们的操作必须是整数
& 按位与-按二进制位与
对应的二进制位有一个为0则为0,两个为1才为1
| 按位或-按二进制位或
对应的二进制位有一个1则为1,两个同时为0才为0
^ 按位异或-按二进制异或
对应的二进制位相同为0,相异为1
5.赋值操作符
=(变量在创建的时候有了的值叫做初始化,如果再给他一个 值就叫做赋值)
==(判断相不相等)
6.复合赋值符
+= -= *= /= 等等
int main()
{
//1
int a = 10;//
a = a+2;
//2
a += 2;//复合赋值符,他与第一种方法等价
a = a>>1;//
a >>= 1;//也是等价的
return 0;
}
7.单目操作符
只有一个操作数
! 逻辑反操作(真变假假变真)
- 负值
+ 正值
& 取地址
* 解引用操作符
sizeof 求 ......大小(计算变量所占内存的大小,单位是字节)
#define _
#include<stdio.h>
int main()
{
int a = 10;
short s = 0;//短整型,它只能存储两个字节的大小
printf("%d\n", sizeof(s = a + 5));//所以不管怎么样,打印的最大值是二,这里面的a+5是不会参与运算的,所以s的值也不会发生变化
printf("%d\n",s);//没有发生变化,sizeof内部的表达式不参与运算
return 0;
}
~ 对一个二进制数的按位取反(二进制的所有位真变假假变真)
源码符号位不变其他符号位按位取反得到反码,其他符号为不变反码加1得到补码
-- 前置,后置--
++ 前置,后置++
(类型) 强制类型转换
8.关系操作符
>
>=
<
<=
!= 不相等
== 相等,判断
9.逻辑操作符
&& 逻辑与 ,或者(两个变量都为真则为真,有一个为假,则为假)
|| 逻辑或,并且(有一个为真则为真,两个同时为假才为假)
逻辑与的特点,左边如果算出的结果是假,则右边的就不会再计算了,不管右边是真还是假
逻辑或的特点,左边如果算的结果是真,则右边的就不会在计算了,不管右边是真还是假
10.条件操作符(三目操作符)
exp1 ? exp2 : exp3
表达式1执行的结果为真,执行表达式2(表达式2的结果为整个表达式的结果),否则,执行表达式3(表达式3是整个表达式的结果)
例如,我们要实现一个这样的程序,如何用条件操作符来实现??
#define _
#include<stdio.h>
int main()
{
int a = 0
int b = 0
if(a>5)
b = 3;
else
b = -3;
return 0;
}
如何用条件操作符来实现呢?
#define _
#include<stdio.h>
int main()
{
b = (a>5 ? 3 : -3);//如果a>5为真,则会执行表达式二,也就是3,如果为假,执行表达式3,也就是-3
}
11.逗号表达式
逗号表达式,就是用逗号隔开的多个表达式,逗号表达式,从左到右依次执行,整个表达式的结果是最后一个表达式的结果
12.下标引用。函数调用和结构成员
1.下标引用操作符[]
操作数:一个操作数+一个索引值
2.函数调用操作符()
接受一个或者多个操作数,第一个操作数是函数名,剩余的操作数就是传递给函数的参数
调用函数的时候的()就是函数调用操作符
3.结构体成员
#define _
#include<stdio.h>
struct stu//创建一个结构体类型strust stu
{//描述结构体成员需要的成员变量
char name[20];
int age;
char id[20];
};
int main()
{
int a = 10;
struct stu* ps = &s1;
printf("%s\n", (*ps).name);//ps里面存着s1的地址,通过对ps的解引用操作符找到s1地址里面存放的常量,然后加以.name就能找到他的成员
printf("%s\n", ps->name);//ps所指向的对象的成员name,也可以这样来打印,会比较快
struct stu s1 = {"张三", 20, "123456789"};//创建了一个学生对象s1,并初始化
printf("%d\n", s1.name);//将s1打印,点操作符用来访问结构体成员,点是作用于左边是一个结构体变量,右边是结构体成员名
printf("%d\n", s1.age);
printf("%d\n", s1.id);
return 0;
} //结构体变量.成员名