【C语言】操作符

前言

欢迎关注我的专栏:C语言语法知识

https://blog.csdn.net/zhengzjm/category_12170453.html

算术操作符 

+
-
*
/
%取余

算术操作符比较简单,要注意的点有:

 1、对于 / 操作数都为整数时执行整数出发,有一个及以上的操作数是浮点数时,执行小数除法。

2、对于%,两边的操作数必须是整数。

移位操作符 

>>右移操作符
<<左移操作符

将1右移5位

1 >> 5

将1左移5位

1 << 5

移位操作符的操作数必须是整数。 

左移操作符的移位规则 

左边舍弃,右边补零。

右移操作符的移位规则 

右移操作符的移位规则分为两种,一种是算术移位,另一种是逻辑移位。

具体用什么规则,取决于编译器。

算术移位

右边丢弃,左边用符号位填补

逻辑移位

右边丢弃,左边补零。

位操作符 

这里为“位”指的是二进制位。

&按位与
|按位或
^按位异或

 按位与

有零则零。

按位或 

有一则一。

按位异或 

相同为零,相异为一。 

 赋值操作符

+=
-=
*=
/=
%=
>>=
<<=
&=
|=
^=

 a %= b等价于a= a%b

单目操作符 

逻辑反操作
-负值
+正值
&取地址符
sizeof求操作数的类型长度(以字节为单位)
~按位取反(对一个数的二进制形式)
--前置--,后置--
++前置++,后置++
*间接引用操作符(解引用操作符)
(类型)强制类型转换

关系操作符 

 

>大于
>=大于等于
<小于
<=小于等于
!=不等于
==等于

逻辑操作符 

&&逻辑与(并且)
||逻辑或(或者)

条件操作符 

exp1 ? exp2: exp3

exp1是否为真?是则执行exp2,否则执行exp3.。

(exp为表达式) 

逗号表达式 

exp1,exp2,exp3,...

以最后的表达式结果作为整个逗号表达式的结果。 

下标引用操作符、函数调用操作符、结构成员访问操作符 

【】下表引用操作符
()函数调用操作符
.结构体成员访问操作符
->结构体成员访问操作符(适用于结构体指针)

表达式求值

隐式类型转换 

C 的整型算术运算总是至少以缺省整型类型(int类型)的精度来进行的。
为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为 整型 提升

整型提升的意义 

表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器(ALU)的操作数的字节长度 一般就是int的字节长度,同时也是CPU的通用寄存器的长度。
因此,即使两个char类型的相加,在CPU执行时实际上也要先转换为CPU内整型操作数的标准长度。
通用CPU(general-purpose CPU)是难以直接实现两个8比特字节直接相加运算(虽然机器指令中可能有这种字节相加指令)。所以,表达式中各种长度可能小于int长度的整型值,都必须先转换为int或unsigned int,然后才能送入CPU去执行运算。

整型提升的方式 

高位补充符号位。

算术转换 

long double

double

float

unsigned long int

long int

unsigned int

int

(由低到高转换(int->long double))

操作符的属性 

复杂表达式的求值有三个影响的因素。
1. 操作符的优先级
2. 操作符的结合性
3. 是否控制求值顺序。
两个相邻的操作符先执行哪个?取决于他们的优先级。如果两者的优先级相同,取决于他们的结合性。

总结 

介绍了算术操作符、移位操作符、位操作符、单目操作符、关系操作符、逻辑操作符、条件操作符、逗号表达式、下表引用操作符、函数调用操作符、结构成员访问操作符、赋值操作符、整型提升、算术转换。

  • 12
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值