C/CPP運算優(yōu)先級的坑及解決
更新時間:2023年08月04日 16:06:34 作者:_不會dp不改名_
這篇文章主要介紹了C/CPP運算優(yōu)先級的坑及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
C/CPP運算優(yōu)先級坑
1. 位運算優(yōu)先級低于比較運算符
做leetcode時遇到的,判斷一個數某一比特位是否為0。
if ( val & 2 == 0) { // do someting... }
萬萬沒想到&
運算符的優(yōu)先級是低于==
的,debug了好久,得加上括號。
1.1 驗證
#include <iostream> int main( int argc, char *argv[]){ int val = 2; if ( val & 1 == 0) { std::cout << "without (): bit 1 is 0" << std::endl; } else { std::cout << "without (): bit 1 is 1" << std::endl; } if ( (val & 1) == 0) { std::cout << "with (): bit 1 is 0" << std::endl; } else { std::cout << "with (): bit 1 is 0" << std::endl; } return 0; }
輸出結果為
without (): bit 1 is 1
with (): bit 1 is 0
2. 移位運算符優(yōu)先級低于算術運算符
這是在寫二分的時候遇到的, l + (r-l) >> 1
的值永遠為r >> 1
應該寫作l + (r - l >> 2)
。
2.1 驗證
#include <iostream> int main( int argc, char *argv[]){ int l = 2, r = 8; int mid = l + (r - l) >> 1; int mid2 = l + ( r - l >> 1); std::cout << "mid: " << mid << std::endl; std::cout << "mid2: " << mid2 << std::endl; return 0; }
輸出結果為
mid: 4
mid2: 5
C語言運算優(yōu)先級口訣
C語言常用運算符的優(yōu)先級口訣是:“單算關邏條賦逗”;
如果加入位運算符,完整口訣是:“單算移關與,異或邏條賦”。
- “單”表示單目運算符:邏輯非(!),按位取反(~),自增(++),自減(--),取地址(&),取值(*);
- “算”表示算術運算符:乘、除和求余(*,/,%)級別高于加減(+,-);
- “移”表示按位左移(<<)和位右移(>>);
- “關”表示關系運算符:大小關系(>,>=,<,<=)級別高于相等不相等關系(==,!=);
- “與”表示按位與(&);
- “異”表示按位異或(^);
- “或”表示按位或(|);
- “邏”表示邏輯運算符:邏輯與(&&)級別高于邏輯或(||);
- “條”表示條件運算符(? :);
- “賦”表示賦值運算符(=,+=,-=,*=,/=,%=,>>=,<<=,&=,^=, |=,!=);
另,逗號運算符(,) 級別最低,口訣中沒有表述,需另加記憶..
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章

解析C++中的for循環(huán)以及基于范圍的for語句使用
這篇文章主要介紹了解析C++中的for循環(huán)以及基于范圍的for語句使用,是C++入門學習中的基礎知識,需要的朋友可以參考下
2016-01-01