操作符大杂烩

操作符


操作符分类

在这里插入图常用的片描述

一、基本运算符

1、算数运算符
+ - / * %

对于+ - * /不多赘述,注意/的被除数不为零即可,
对于%
叫做求模运算也叫取余
求模运算符只能用于整数不能用于浮点数*
整数包括正数和负数,得数的正负取决于%号前边的数
最重要的是不要用浮点数进行求模运算。
求模运算用途比较多,比如说求一个数的个位十位百位,
123%10就得到个位3,也可以用欧几里得算法求一个最大公约数(辗转相除法),学会这个算法会对求模运算符有一个比较好的理解

2、赋值

对于赋值运算符,要先了解左值和右值
左值可修改的左值是算数表达式左侧的值
右值是指能赋值给可修改左值的值,且本身不可以为左值

= -= += /= *= %=

了解左值和右值后,就可以更好的理解赋值了。
赋值运算=是把一个右值赋值给可修改的左值
+= -= *= /= %= 是一种省略的写法
+=就是先进行加法再赋值
例如:
a +=1等价与a = a + 1
-= /= *= %=等都是一个道理

二、逻辑操作符

逻辑操作符包括&&和||和!逻辑与逻辑或逻辑非

&&逻辑与

逻辑与是全真才为真
也就是
1 && 1 =1
1 && 0 = 0
0 && 0= 0

||逻辑或

逻辑或是有真则真
也就是
1 || 1 = 1
1 || 0 = 1
0 || 0 = 0

!逻辑非

逻辑非是对象为真操作后为假,对象为假操作后为真
也就是
!1 == 0
!0 == 0

三、移位操作符

包含: >>和<<两种
是对二进制进行操作的

按位左移<<

规则:左边抛弃右边补0
例如:
a=10,二进制表示就是
00000000000000000000000000001010
a<<1
得到
00000000000000000000000000010100
a = 20

按位右移>>

分为两种
1、逻辑右移:左边用0填充,右边丢弃
2、算数右移:左边用原该值的符号位填充,右边丢弃
一般是第二种右移
由于负数的补码是对原码取反+1
符号位负数为1,正数为0
a = -1
原码:10000000000000000000000000000001
反码:1111111111111111111111111111111111110
补码:1111111111111111111111111111111111111
a>>1
得到:1111111111111111111111111111111111111
注意不可以进行负数操作

四、位操作符

分为三种&|^~按位与按位或按位异或

&按位与

与前边的逻辑与一样,全一为一,但是对二进制操作
例如a = 1 , b = 2
a为00000000000000000000000000000001
b为00000000000000000000000000000010
得00000000000000000000000000000000

|按位或

与逻辑或一样,有一则一,对二进制操作
例如a = 1 , b = 2
a为00000000000000000000000000000001
b为00000000000000000000000000000010
得00000000000000000000000000000011

按位异或

二进制位相同则为0,不同为1
例如a = 1 , b = 2
a为00000000000000000000000000000001
b为00000000000000000000000000000010
得00000000000000000000000000000011

五、单目操作符

有++ - - sizeof &(取地址)*强制类型转换

++递增运算符

有两种方式出现方式
1、++在前
例如++a就代表先递增后用
2、++在后
例如a++是先用后递增

- -递减运算符

跟++一样
有两种方式出现方式
1、- -在前
例如- - a就代表先递减后用
2、- -在后
例如a - -是先用后递减

sizeof

计算变量在内存的所占空间大小,单位是字节
例如:
int a = sizeof(arr)/sizeof(arr[0]);
用于求数组长度

&取地址

用于指针的操作,取出某一个变量的地址

*解引用操作符

用于储存一个变量的指针
int * a = &b;
就是把b变量的地址取出放到a变量中

()强制转换

(type_name) expression
例如
float a = 12.0;
(int) a 就是把float的转换为int类型
除了强制转换,编译器还可以自动转换类型,当进行不同类型的运算时会进行类型转换
short和char进行混合运算时会转化为int类型,正如下图
从较小类型转化 为较大类型运算
在这里插入图片描述在赋值表达式语句中,计算的最终结果会被转换成被赋值变量的类型
在这里插入图片描述
例如这道题,表达式右侧为int类型,3/2结果应该是1.5,截断为2,x= 2.5截断为2 ,相加得到y=3,由于y是double类型,最终的结果就是double类型的,得到y=3.0
由于以上的机制会造成类型升级或降级

六、关系操作符

关系操作符有> < >= <= == !=

需要注意的是 ==是等于!=是不等于

其中==容易和=(赋值)搞错

七、逗号表达式

表达式,表达式,……
就是逗号表达式
表达式从左到右进行,表达式的最终值与最右边的值相等
例如

int a = 1,b = 2;
c= (a++,b+=a ,++b)

得到c=5

八、条件操作符

也就是exp1:exp2?exp3
与if else语句一样
相当于

if(exp1)
exp2;
else
exp3;

如果表达式1正确,执行表达式2,否则执行表达式3

操作符优先级

在这里插入图片描述
上边的表格就包含了基本的优先级关系,对于一些容易引起误会的公式,尽量用()包住,可以大大增强代码的可读性

  • 27
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lin_or_lin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值