负号的优先级比&来的高

编程之美:求二进制数中的1的个数:第二个补充习题

一开始代码如下:

#include <stdio.h>
#include <math.h>
int main()
{
    int m,n;
    int flag=0;
   
    printf("input m and n:");
    scanf("%d%d",&m,&n);
   
    while(m||n)
    {
        flag+=abs(m&1-n&1);
        m>>=1;
        n>>=1;
   }
    printf("flag=%d/n",flag);
}
运行以后,发现结果不对,用printf输出结果,来进行调试。

最后原因知道了,原来负号的优先级比&来的大,然后搞定代码:

#include <stdio.h>
#include <math.h>
int main()
{
    int m,n;
    int flag=0;
   
    printf("input m and n:");
    scanf("%d%d",&m,&n);
   
    while(m||n)
    {
        flag+=abs((m&1)-(n&1));//负号的优先级比&要来的高
        m>>=1;
        n>>=1;
   }
    printf("flag=%d/n",flag);
}
网上摘录了C语言操作符的优先级:

 

优先级

运算符

名称或含义

使用形式

结合方向

说明

1

[]

数组下标

数组名[ 常量表达式]

左到右

 

()

圆括号

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

 

.

成员选择(对象)

对象 . 成员名

 

->

成员选择(指针)

对象指针-> 成员名

 

2

-

负号运算符

- 表达式

右到左

单目运算符

( 类型)

强制类型转换

( 数据类型) 表达式

 

++

自增运算符

++ 变量名/ 变量名++

单目运算符

--

自减运算符

-- 变量名/ 变量名--

单目运算符

*

取值运算符

* 指针变量

单目运算符

&

取地址运算符

& 变量名

单目运算符

!

逻辑非运算符

! 表达式

单目运算符

~

按位取反运算符

~ 表达式

单目运算符

sizeof

长度运算符

sizeof( 表达式)

 

3

/

表达式/ 表达式

左到右

双目运算符

*

表达式* 表达式

双目运算符

%

余数(取模)

整型表达式/ 整型表达式

双目运算符

4

+

表达式+ 表达式

左到右

双目运算符

-

表达式- 表达式

双目运算符

5

<< 

左移

变量<< 表达式

左到右

双目运算符

>> 

右移

变量>> 表达式

双目运算符

6

大于

表达式> 表达式

左到右

双目运算符

>=

大于等于

表达式>= 表达式

双目运算符

小于

表达式< 表达式

双目运算符

<=

小于等于

表达式<= 表达式

双目运算符

7

==

等于

表达式== 表达式

左到右

双目运算符

!=

不等于

表达式!= 表达式

双目运算符

8

&

按位与

表达式& 表达式

左到右

双目运算符

9

^

按位异或

表达式^ 表达式

左到右

双目运算符

10

|

按位或

表达式| 表达式

左到右

双目运算符

11

&&

逻辑与

表达式&& 表达式

左到右

双目运算符

12

||

逻辑或

表达式|| 表达式

左到右

双目运算符

13

?:

条件运算符

表达式1? 表达式2: 表达式3

右到左

三目运算符

14

=

赋值运算符

变量= 表达式

右到左

 

/=

除后赋值

变量/= 表达式

 

*=

乘后赋值

变量*= 表达式

 

%=

取模后赋值

变量%= 表达式

 

+=

加后赋值

变量+= 表达式

 

-=

减后赋值

变量-= 表达式

 

<<=

左移后赋值

变量<<= 表达式

 

>>=

右移后赋值

变量>>= 表达式

 

&=

按位与后赋值

变量&= 表达式

 

^=

按位异或后赋值

变量^= 表达式

 

|=

按位或后赋值

变量|= 表达式

 

15

,

逗号运算符

表达式, 表达式,

左到右

从左向右顺序运算

说明:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中运算符的优先级是根据其在表达式中的位置来确定的。优先级的运算符先执行,优先级低的运算符后执行。同一优先级的操作按照从左到右的顺序进行。可以使用小括号来改变运算符的优先级,括号内的运算最先执行。以下是Python中运算符的优先级到低的顺序:幂运算符(**),正号和负号(+、-),乘法、除法、取整除法和取余数(*、/、//、%),加法和减法(+、-),比较运算符(>、>=、<、<=、==、!=)。\[1\] 另外,Python中没有降低运算符优先级的特殊运算符。根据相对性原理,给一个运算符最优先级,就相当于给其他运算符最低优先级了。如果想给一个运算符最低的优先级,可以将其余的运算符全部用小括号包围起来。\[2\] 总结一下,Python中的运算符优先级按照从到低的顺序是:幂运算符(**),正号和负号(+、-),乘法、除法、取整除法和取余数(*、/、//、%),加法和减法(+、-),比较运算符(>、>=、<、<=、==、!=)。\[1\] #### 引用[.reference_title] - *1* *3* [Python中的所有运算符以及运算符的优先级](https://blog.csdn.net/2201_75641637/article/details/128449867)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Python运算符优先级](https://blog.csdn.net/gongxiaxx/article/details/125236226)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值