[C语言]__操作符和表达式简单介绍__

操作符和表达式

1. 算数操作符

加“+”:把两个操作数相加。

减“-”:从第一个操作数中减去第二个操作数。

*:把两个操作数相乘。

除“/”:两个操作数相除。

取模(求余)“%:整除后取余数。

注意:

①%不能对浮点数进行取模,只能对整数。而其他的均可以对浮点数进行操作。

②/操作分为整数除法和浮点数除法。

 

2. 移位操作符

左移操作符<<:表示二进制序列向左移动规定位数,最高位丢弃,最低位补0。

右移操作符>>:表示二进制序列向右移动规定位数,分为算术右移和逻辑右移。

算数右移:右边丢弃,左边补符号位。

逻辑右移:右边丢弃,左边补0。

注意:

①左移操作相当于给操作数乘2。

②右移操作(不论是算数还是逻辑)相当于给操作数除2。

警告:

①对于移位运算符,不要移动负数位,这个是标准未定义的。

 

3. 位操作符

按位与“&”:二进制序列按位与操作,同时为1才为1

按位或“|”:二进制序列按位或操作,同时为0才为0。

按位异或“^”:二进制序列按位异或操作,相同为0,相异为1。

可以实现不创建第三个变量就实现两个数的交换。

注意:

①位操作符的操作数必须为整数。

 

4. 赋值操作符

 

基本的赋值运算符是=
注意:
int a=1;初始化
A=2;赋值

这两个“=”代表的意思不一样。

 

复合赋值符:

加且赋值“+=”: C+=A相当于C=C+A。

减且赋值“-=”: C-=A相当于C=C-A。

乘且赋值“*=”: C*=A相当于C=C*A。

除且赋值“/=”: C/=A相当于C=C/A。

求模且赋值“%/”: C%=A相当于C=C%A。

左移且赋值“<<=”: C<<=1相当于C=C<<1。

右移且赋值“>>=”: C>>=1相当于C=C>>1。

按位与且赋值“&=”: C&=1相当于C=C&1。

按位异或且赋值“^=”: C^=A相当于C=C^1。

按位或且赋值“|=”: C|=A相当于C=C|1。

 

 

5. 单目操作符

逻辑反操作“!”:逻辑反操作,用来逆转操作数逻辑状态。

Int flag=1; !flag=0;


负值“-”:表示一个数为负值。


正值“+”:表示一个数为正值。


取地址“&”:返回变量的地址。

printf(“%p ”,&a);打印a的地址。

printf(“%p “,&arr);打印数组arr的地址。

printf(“%p “,arr);打印数组arr的首元素地址。

printf(“%p “,&arr+1);打印数组arr加了40后的地址。

printf(“%p “,arr+1);打印数组arr加了4的地址。


操作数的类型长度“sizeof”:求取操作数的类型长度。以字节为单位。

注意:

①sizeof(a) 和 sizeof a均可以执行,证明sizeof不是函数。

②数组名单独放在sizeof内部,数组名表示整个数组。

③sizeof内部的表达式不计算。

④sizeof(类型)一定要加括号,不可省略。

 

对一个数的二进制按位取反“~”

注意:

①符号位也要取反。

 

前置、后置减减“--”:自减运算符。

注意:

①前置--:先--,再使用。

②后置--:先使用,再--。


前置、后置加加“++”:自增运算符。

注意:

①前置++:先++,再使用。

②后置++:先使用,再++。

补充:

①指针++:

prinft(“%p ”,p);0x0012ff40

printf(“%p ”,++p);0x0012ff44 相当于加上了1*sizeof(指针类型)的值

 

直接访问(解引用)操作符“*”

注意:

①int * p=&a; *是定义指针类型时的规定,不是解引用操作符。

  *p=20; *为解引用操作符。


强制类型转换“(类型)”:当操作数的类型不同,而且不属于基本数据类型时,经常需要将操作数转化为所需要的类型。

 

6. 关系操作符

大于“>”:a大于b时返回真;否则返回假。


小于“<”:a小于b时返回真;否则返回假。


大于等于“>=”:a大于等于b时返回真;否则返回假。


小于等于“<=”:a小于等于b时返回真;否则返回假。


不等于“!=”:a不等于b时返回真;否则返回假。


等于“==”:a等于b时返回真;否则返回假。

注意:

①不要将==和=的作用混为一谈。

②关系运算符的值只能是0或1。

③关系运算符的值为真时,结果值都为1。

④关系运算符的值为假时,结果值都为0。

 

7. 逻辑操作符

逻辑与“&&”:只有两个操作数都是true,结果才是true。但是如果左边操作数为false,就不计算右边的表达式,直接得出false(左边为假后边不用算)。


逻辑或“||”:如果一个操作数或多个操作数为 true,则逻辑或运算符返回布尔值 true;只有全部操作数为false,结果才是 false。仅当第一个操作数的计算结果为 false 时计算第二个操作数(左边为真后面不用算)。

 

8. 条件操作符(三目操作符)

<表达式1> ? <表达式2> : <表达式3>;

"?"运算符的含义是:先求表达式1的值,如果为真,则执行表达式2,并返回表达式2的结果;如果表达式1的值为假,则执行表达式3,并返回表达式3的结果。

 

9. 逗号表达式

逗号表达式“,”:它将两个及其以上的式子联接起来,从左往右逐个计算表达式,整个表达式的值为最后一个表达式的值。

注意:

①逗号表达式的运算过程为:从左往右逐个计算表达式。

②逗号表达式作为一个整体,它的值为最后一个表达式(也即表达式n)的值。

③逗号运算符的优先级别在所有运算符中最低。

 

10. 下标引用

“[]”:操作数:一个数组名+一个索引值。

 

11. 函数调用

“()”:一般形式为:函数名(实际参数表)。

注意:

①对无参函数调用时则无实际参数表。实际参数表中的参数可以是常数、变量或其它构造类型数据及表达式。各实参之间用逗号分隔。

②字符函数引用即对引用有关库函数或自定义函数函数。

 

12. 结构成员

   . 结构体.成员名

    -> 结构体指针->成员名


附:

运算符优先级

优先级
运算符
名称或含义
使用形式
结合方向
说明
1
后置++
后置自增运算符
变量名++
左到右
 
后置-- 后置自减运算符 变量名--  
[ ]
数组下标
数组名[整型表达式]
 
( )
圆括号
(表达式)/函数名(形参表)
 
.
成员选择(对象)
对象.成员名
 
->
成员选择(指针)
对象指针->成员名
 
2
-
负号运算符
-表达式
右到左
单目运算符
(类型)
强制类型转换
(数据类型)表达式
 
前置++
前置自增运算符
++变量名
单目运算符
前置--
前置自减运算符
--变量名
单目运算符
*
取值运算符
*指针表达式
单目运算符
&
取地址运算符
&左值表达式
单目运算符
!
逻辑非运算符
!表达式
单目运算符
~
按位取反运算符
~表达式
单目运算符
sizeof
长度运算符
sizeof 表达式/sizeof(类型)
 
3
*
表达式*表达式
左到右
双目运算符
/
表达式/表达式
双目运算符
%
余数(取模)
整型表达式%整型表达式
双目运算符
4
+
表达式+表达式
左到右
双目运算符
-
表达式-表达式
双目运算符
5
<<
左移
表达式<<表达式
左到右
双目运算符
>>
右移
表达式>>表达式
双目运算符
6
>
大于
表达式>表达式
左到右
双目运算符
>=
大于等于
表达式>=表达式
双目运算符
<
小于
表达式<表达式
双目运算符
<=
小于等于
表达式<=表达式
双目运算符
7
==
等于
表达式==表达式
左到右
双目运算符
!=
不等于
表达式!= 表达式
双目运算符
8
&
按位与
整型表达式&整型表达式
左到右
双目运算符
9
^
按位异或
整型表达式^整型表达式
左到右
双目运算符
10
|
按位或
整型表达式|整型表达式
左到右
双目运算符
11
&&
逻辑与
表达式&&表达式
左到右
双目运算符
12
||
逻辑或
表达式||表达式
左到右
双目运算符
13
?:
条件运算符
表达式1? 表达式2: 表达式3
右到左
三目运算符
14
=
赋值运算符
变量=表达式
右到左
 
/=
除后赋值
变量/=表达式
 
*=
乘后赋值
变量*=表达式
 
%=
取模后赋值
变量%=表达式
 
+=
加后赋值
变量+=表达式
 
-=
减后赋值
变量-=表达式
 
<<=
左移后赋值
变量<<=表达式
 
>>=
右移后赋值
变量>>=表达式
 
&=
按位与后赋值
变量&=表达式
 
^=
按位异或后赋值
变量^=表达式
 
|=
按位或后赋值
变量|=表达式
 
15
,
逗号运算符
表达式,表达式,…
左到右
从左向右顺序运算

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值