c语言常用符号优先级问题,【C语言】符号优先级

本文详细解析了C语言中符号的优先级,以一道笔试题为例,解释了负号、异或运算符和位运算符的优先级。同时列举了完整的运算符优先级表,并提供了记忆口诀,帮助理解运算符的结合方向和使用注意事项。
摘要由CSDN通过智能技术生成

一. 问题的引出

今天看阿里的笔试题,看到一个非常有意思的题目,但是很容易出错。

题目:如下函数,在32bit系统foo(2^31-3)的值是:

Int foo(int x)

{

return x&-x;

}

解答:如果想要答对这道题目,首先要清楚C语言中符号的优先级别,负号(-)的优先级高于^,所以2^31-3=2^28,还有一个陷阱就是C语言中认为^为异或运算而不是幂函数,所以2^28=30,然后计算30 & -30得出结果。又因为计算机内存中的数据是以二进制的补码形式存在的,所以参与位运算的数都是以补码形式出现。所以需要把30和-30转换为补码之后再进行按位与运算,结果为2。我们还可以用程序看看执行过程中产生的x的值如下:

#include

using namespace std;

int foo(int x){

cout << "x = " << x << endl;

return x & -x;

}

void main(){

int res = ;

res = foo(^-);

cout << "res = " << res << endl;

}

二. 字符的优先级

优先级

运算符

名称或含义

使用形式

结合方向

说明

1

[]

数组下标

数组名[常量表达式]

左到右

()

圆括号

(表达式)/函数名(形参表)

.

成员选择(对象)

对象.成员名

->

成员选择(指针)

对象指针->成员名

2

-

负号运算符

-表达式

右到左

单目运算符

(类型)

强制类型转换

(数据类型)表达式

++

自增运算符

++变量名/变量名++

单目运算符

--

自减运算符

--变量名/变量名--

单目运算符

*

取值运算符

*指针变量

单目运算符

&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值