C语言绝对值得一看的常识讲解:运算符篇 篇3

前面两篇文章介绍了不少运算符,但关于运算符还是有一些值得我们注意的知识点没讲到,所以,我们在这篇文章中再加以补充,希望能使大家对于运算符的认识更加全面。

目录

1.逻辑运算符

1.1逻辑运算符的种类

1.2逻辑运算符的使用说明

1.2.1& 和 &&

1.2.2| 和 ||

1.2.3!

1.2.4^逻辑异或:两个运算对象相同为False,相异为True(只关注两个运算对象逻辑值的异同,不关注逻辑值具体为False或True。

2.下标访问[ ]、函数调⽤()

2.1[ ] 下标引⽤运算符

2.2( ) 函数调⽤运算符

3.运算符的属性:优先级、结合性

3.1优先级

3.2结合性


1.逻辑运算符
1.1逻辑运算符的种类

逻辑运算符有:&、|、&&、||、!、^ 。C语言一共提供了6种逻辑运算符,逻辑运算符的运算结果使逻辑值,即只有逻辑真和逻辑假两个值。

1.2逻辑运算符的使用说明
1.2.1& 和 &&

相同点:
这两个逻辑运算符都表示:“与”,只要两个运算对象中有一个为False,则全为False。

不同点:
&(与):表达式a & 表达式b 在运算时,表达式a和b都会先被执行,再进行True和False的判断。
&&(短路与):表达式a && 表达式b 在运算时,如果表达式a(先被执行的)结果为False,则表达式b不进行运算,直接返回结果,计算效率高。(表达式中有部分可能压根不被执行,所以称为短路与)

1.2.2| 和 ||


相同点:
这两个逻辑运算符都表示:“或”,只要两个运算对象中有一个为True,则全为True。

不同点:
|(或):表达式a | 表达式b 在运算时,表达式a和b都先会被执行,再进行True和False的判断。
||(短路或):表达式a || 表达式b 在运算时,如果表达式a(先被执行的)结果为True,则表达式b不进行运算,直接返回结果,计算效率高。(表达式中有部分可能压根不被执行,所以称为短路或)

1.2.3!


逻辑非:取相反结果,即若运算对象原来为逻辑真变成逻辑假,原来为逻辑假变成逻辑真。

1.2.4^
逻辑异或:两个运算对象相同为False,相异为True(只关注两个运算对象逻辑值的异同,不关注逻辑值具体为False或True。

注意:

①逻辑运算符(&&、||、!)的运算对象可以是数据类型为整型、实型和字符型常量,变量或者合法的表达式。

数值为0即是逻辑假,为其他值均为逻辑真。

②可能有小伙伴会疑惑逻辑运算符怎么和位运算符有重叠的部分呢?其实,它们只是同一个符号,但具体的功能是不同的。

位运算符【&、|、^】区别的方式:

                逻辑运算符:左右连接的是布尔类型的运算对象,即运算对象是的值是逻辑真和逻辑假
                位运算符:左右连接的是具体的数值,特别注意位运算符的运算对象是整数


2.下标访问[ ]、函数调⽤()
2.1[ ] 下标引⽤运算符

运算对象:一个数组名和一个索引值

int arr[10];//创建数组
arr[9] = 10;//实⽤下标引⽤操作符。
//[ ]的两个运算对象是arr和9。

[ ] 下标引⽤运算符的使用是基于数组的基础上,所以我们在使用前是需要建立一个数组。不过,客观实际上来说,并不是数组服务于[ ] 下标引⽤运算符,而是[ ] 下标引⽤运算符就是为了方便使用数组而出现的。所以,大家可不要为了使用这个运算符而使用。

特别注意:索引值不要超过数组的大小,不然可能会造成程序错误,影响程序结果。

2.2( ) 函数调⽤运算符

接受⼀个或者多个运算对象:第⼀个运算对象是函数名,剩余的运算对象就是传递给函数的参数。

#include <stdio.h>
void test1()
{
 printf("hehe\n");
}
void test2(const char *str)
{
 printf("%s\n", str);
}
int Add(int x , int y)
{
    return x + y ;
}
int main()
{
 test1(); //这⾥的()就是作为函数调⽤运算符。
 test2("hello bit.");//这⾥的()就是函数调⽤运算符。
 int x=1,y=2;
 int add;
 add=Add( x , y );//这里的()也是函数调用运算符
 return 0;
}

大家可能看到这个符号的第一瞬间想到的就是正常括号,在范围内改变运算顺序。但实际上,函数调用运算符和括号的功能还真不一样。

具体特点:

①函数调用运算符的第一个运算对象就是其前面的函数名,这个也是不可缺少的运算对象。(你调用函数,总不能连函数都没有吧)

②函数调用运算符内部,更像是括号和逗号运算符形式上的结合,因为括号和逗号运算符都失去其本身的功能,逗号在这里仅仅起到分隔参数的作用,而没有顺序求值的作用。

③函数调用运算符的参数个数没有上限,具体看其调用的函数需要多少个参数。

3.运算符的属性:优先级、结合性

C语⾔的运算符有2个重要0属性:优先级、结合性,这两个属性决定了表达式求值的计算顺序。

3.1优先级

优先级指的是,如果⼀个表达式包含多个运算符,哪个运算符应该优先执⾏。各种运算符的优先级是 不⼀样的。

3 + 4 * 5;

 上⾯⽰例中,表达式 3 + 4 * 5 ⾥⾯既有加法运算符( + ),⼜有乘法运算符( * )。由于乘法 的优先级⾼于加法,所以会先计算 4 * 5 ,⽽不是先计算 3 + 4 。

3.2结合性

如果两个运算符优先级相同,优先级没办法确定先计算哪个了,这时候就看结合性了,则根据运算符 是左结合,还是右结合,决定执⾏顺序。⼤部分运算符是左结合(从左到右执⾏),少数运算符是右 结合(从右到左执⾏),⽐如赋值运算符( = )

7* 6 / 3;

 上⾯⽰例中, * 和 / 的优先级相同,它们都是左结合运算符,所以从左到右执⾏,先计算 7 * 6 , 再计算 6 / 3。

运算符的优先级顺序很多,结合性也是分为从右向左和从左向右两种,大家可以结合下表记忆。

参考:https://zh.cppreference.com/w/c/language/operator_precedence

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值