一,操作符的分类
接下来,让博主为你一一讲解各类操作符
二,算术操作符
这里要注意的是/号,/两端必须都是整数。,得出的结果是整数
如果想要得到小数,可以把/一端换成小数
相信大家都理解/的用法了吧~当然我们也要理解%两端也是整数,返回的结果是整数相除后的余数
三.移位操作符
无符号:unsigned
注意:对于正的整数,原码=反码=不骂,可以不用计算(0当作无符号数整数)
而对于负的整数,原码,补码,反码需要计算
反码:原码的符号位不变,其他的按位取反
补码:补码是反码的二进制+1
举个栗子吧~
不管是正数还是负数,内存中存储的都是补码的二进制,整数在计算机的时候也用的补码!!!
左移操作符:(有*2的效果)
步骤:左边丢弃,右边补0
相信大家应该很好奇负数吧~让我们看看负数的效果吧
右移操作符(2种方式):(有/2的效果)
1.算数右移:
右边直接丢弃,左边用该原值的符号位填充
2.逻辑右移:
右边直接丢弃,左边直接补0
采用哪种右移方式,取决于编译器,大部分编译器用的是算术右移
例如:int num=10;num>>-1(是错误的方法)
四,位操作符(必须是整数)
补码得到原码的三种方法:
异或运算的特点:相同为0;相异为1
a^a=0; 0^a=a;
例题:不创建第三个变量,交换两个数
五,复合运算符
六,单目操作符
1.*和&的介绍:
2. sizeof的知识点:
3.~的知识点:
4. ++,--的知识点
++操作是一种自增1的操作
前置++:先+1,后使用 (a=a+1,b=a) 后置++:先使用,后+1;(b=a,a=a+1)
七.关系操作符
唯一注意的是:==是等号,=是赋值
八,逻辑操作符
1,逻辑与&&(并且)
2,逻辑或||(或者)
让我们接下来看看一个代码:
因为a++,先使用后自增,所以i=a++那一行式子,用的a=0,由于是&&的关系,所以a++后面的式子不用计算,所以输出结果是a=1,b=2,c=3,d=4,i=0
综上所述,可以得到,
&&的特点是 左边操作数如果为假,则右边不用计算;||的特点是 左边操作数为真,右边无需计算(称之为短路操作)
九,条件操作符(三目操作符)
举个例子:
求两个数的最大值:
方法1:
方法2:
十,逗号表达式(从左向右依次计算)
最终表达式的结果,取决于最后一个表达式的结果
if(a>1,b,d>0) //也是一个逗号表达式,真正起判断作用的是d>0
十一,下标引用,函数调用和结构成员
1,下标引用操作符
操作数+一个索引值
看下面代码的例子,5是操作数,arr【5】是一个索引值(索引值其实就是下标)
2,函数调用操作符
函数名+函数参数都是函数调用的操作数(对于一个函数调用操作数来说,最少有1个操作数(函数名,可以不传参)
3,结构成员操作符
两种方式:
十二,表达式求值
表达式求值顺序一部分是由操作符的优先级和结合性决定。
同时有的表达式操作数在运算过程中需要转化类型
12.1 隐式类型转化
1.算数转化(>=int类型)
如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数的转化为另一个操作数的类型,否则操作就无法进行
2.整型提升(提升char short)
在这个代码中,我们看到,sizeof(+c)和sizeof(—c)发生了整型提升