C/C++ —— 算符优先级的问题

算符优先级首先决定了,一些括号是可加可不加,还是必须加;

  • ==号的优先级要大于&、|、^(位运算) 的优先级,所以如果判断一个数是否为偶数:

    if (x & 1 == 0)
    					// if (x & (1 == 0))
    					// 是永远不会成立的
    

1. 注意

  • b & 1 == 0 ⇒ b & (1 == 0) ⇒ 0

    • 显然不是期望的结果
    • ==(!=,比较运算符) 的优先级要大于 & (|/^,位运算符)
  • 移位运算符(>>/<< )大于比较运算符(> / < / ==)

    cout << boolalpha << a == b << endl;
    				// 是会报错的;
    cout << boolalpha << (a == b) << endl;
    
  • 相等性比较运算!= / ==的优先级要高于赋值运算(=)。

DIR *dp;
struct dirent *dirp;

if (dp = opendir(argv[1]) == NULL){
}
			// 编译不通过
			// opendir(argv[1]) == NULL,先结合
			// 也即 dp = (opendir(argv[1]) == NULL)
			// 将一个布尔变量,赋值给一个指针显然编译不通过。

操作符的优先级确定了结合律;

  • !=(不等号) 的优先级要大于 = (赋值运算符)

    char key = '';
    while (key = getchar() != 'q')
    {							// key 只有两种取值为 0 或者为 1
    	switch(key)
    	{
    		case 'f':
    			...
    		case 't':
    			...
    	}
    }
    

    所以,必要的时候,使用括号确定优先级:

    while ((key=getchar()) != 'q')
    {
    	... 
    }
    
  • +/-/*/\(加减乘除)的优先级要大于移位运算符(<<、>>)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五道口纳什

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值