39.【单选题】以下运算符中优先级最高的是_____。
A . % B . * C .>> D . ++
一个C++运算符优先级问题
答案:2 悬赏:60 手机版
解决时间 2021-03-17 15:22
- 提问者网友:蔚蓝的太阳
- 2021-03-16 21:55
最佳答案
- 五星知识达人网友:舊物识亽
- 2021-03-16 22:04
运算符优先级
在实际的开发中,可能在一个运算符中出现多个运算符,那么计算时,就按照优先级级别的高低进行计算,级别高的运算符先运算,级别低的运算符后计算,具体运算符的优先级见下表:
运算符优先级表
优先级 运算符 结合性
1 () [] . 从左到右
2 ! +(正) -(负) ~ ++ -- 从右向左
3 * / % 从左向右
4 +(加) -(减) 从左向右
5 << >> >>> 从左向右
6 < <= > >= instanceof 从左向右
7 == != 从左向右
8 &(按位与) 从左向右
9 ^ 从左向右
10 | 从左向右
11 && 从左向右
12 || 从左向右
13 ?: 从右向左
14 = += -= *= /= %= &= |= ^= ~= <<= >>= >>>= 从右向左
说明:
1、 该表中优先级按照从高到低的顺序书写,也就是优先级为1的优先级最高,优先级14的优先级最低。
2、 结合性是指运算符结合的顺序,通常都是从左到右。从右向左的运算符最典型的就是负号,例如3+-4,则意义为3加-4,符号首先和运算符右侧的内容结合。
3、 instanceof作用是判断对象是否为某个类或接口类型,后续有详细介绍。
4、 注意区分正负号和加减号,以及按位与和逻辑与的区别
其实在实际的开发中,不需要去记忆运算符的优先级别,也不要刻意的使用运算符的优先级别,对于不清楚优先级的地方使用小括号去进行替代,示例代码:
int m = 12;
int n = m << 1 + 2;
int n = m << (1 + 2); //这样更直观
这样书写代码,更方便编写代码,也便于代码的阅读和维护。
在实际的开发中,可能在一个运算符中出现多个运算符,那么计算时,就按照优先级级别的高低进行计算,级别高的运算符先运算,级别低的运算符后计算,具体运算符的优先级见下表:
运算符优先级表
优先级 运算符 结合性
1 () [] . 从左到右
2 ! +(正) -(负) ~ ++ -- 从右向左
3 * / % 从左向右
4 +(加) -(减) 从左向右
5 << >> >>> 从左向右
6 < <= > >= instanceof 从左向右
7 == != 从左向右
8 &(按位与) 从左向右
9 ^ 从左向右
10 | 从左向右
11 && 从左向右
12 || 从左向右
13 ?: 从右向左
14 = += -= *= /= %= &= |= ^= ~= <<= >>= >>>= 从右向左
说明:
1、 该表中优先级按照从高到低的顺序书写,也就是优先级为1的优先级最高,优先级14的优先级最低。
2、 结合性是指运算符结合的顺序,通常都是从左到右。从右向左的运算符最典型的就是负号,例如3+-4,则意义为3加-4,符号首先和运算符右侧的内容结合。
3、 instanceof作用是判断对象是否为某个类或接口类型,后续有详细介绍。
4、 注意区分正负号和加减号,以及按位与和逻辑与的区别
其实在实际的开发中,不需要去记忆运算符的优先级别,也不要刻意的使用运算符的优先级别,对于不清楚优先级的地方使用小括号去进行替代,示例代码:
int m = 12;
int n = m << 1 + 2;
int n = m << (1 + 2); //这样更直观
这样书写代码,更方便编写代码,也便于代码的阅读和维护。
全部回答
- 1楼网友:轮獄道
- 2021-03-16 22:22
注意一下&&这个运算符 这个运算符有如下两个特点: 1.该运算符是左结合的(也就是说运算步骤是从左向右进行) 2.一旦当该运算符的左边的表达式的值为假(值为0)时,就认为整个&&表达式的值为假(0),不继续进行&&右边的表达式的运算了 所以int b= !a&&++a; 先运算!a,发现!a等于0,表达式为假,所以直接将0赋值给b,不再计算右边的++a了 =========================================================== 问题补充:c语言表达式是根据符号优先级来确定先算哪个吗? 优先级!> ++ > && 所以 先算 !a ,再算 ++a; 再算 && 不对吗? =========================================================== 你列的优先级是对的, 但是注意一点: 一旦当&&运算符的左边的表达式的值为假(值为0)时,就认为整个&&表达式的值为假(0),不继续进行&&右边的表达式的运算了。 也就是说,先运算!a,发现为假,随后编译器发现后面有&&运算,所以直接就不判断后面的表达式了。 如果!a为真,随后编译器发现后面有&&运算,还会继续进行后面的表达式的计算, 而且是等表达式计算完毕后,再判断&&的结果, 所以和你的优先级的疑问是不冲突的
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯