C/CPP運算優(yōu)先級的坑及解決
C/CPP運算優(yōu)先級坑
1. 位運算優(yōu)先級低于比較運算符
做leetcode時遇到的,判斷一個數(shù)某一比特位是否為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; }
輸出結(jié)果為
without (): bit 1 is 1
with (): bit 1 is 0
2. 移位運算符優(yōu)先級低于算術(shù)運算符
這是在寫二分的時候遇到的, l + (r-l) >> 1
的值永遠為r >> 1
應(yīng)該寫作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; }
輸出結(jié)果為
mid: 4
mid2: 5
C語言運算優(yōu)先級口訣
C語言常用運算符的優(yōu)先級口訣是:“單算關(guān)邏條賦逗”;
如果加入位運算符,完整口訣是:“單算移關(guān)與,異或邏條賦”。
- “單”表示單目運算符:邏輯非(!),按位取反(~),自增(++),自減(--),取地址(&),取值(*);
- “算”表示算術(shù)運算符:乘、除和求余(*,/,%)級別高于加減(+,-);
- “移”表示按位左移(<<)和位右移(>>);
- “關(guān)”表示關(guān)系運算符:大小關(guān)系(>,>=,<,<=)級別高于相等不相等關(guān)系(==,!=);
- “與”表示按位與(&);
- “異”表示按位異或(^);
- “或”表示按位或(|);
- “邏”表示邏輯運算符:邏輯與(&&)級別高于邏輯或(||);
- “條”表示條件運算符(? :);
- “賦”表示賦值運算符(=,+=,-=,*=,/=,%=,>>=,<<=,&=,^=, |=,!=);
另,逗號運算符(,) 級別最低,口訣中沒有表述,需另加記憶..
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
正確理解C++的構(gòu)造函數(shù)和析構(gòu)函數(shù)
在C++的學(xué)習(xí)中,可以把類當(dāng)作一個模具,類實例化出來的對象就是根據(jù)這個模具所產(chǎn)生的實體,對象看作是自己創(chuàng)建的一個新的數(shù)據(jù)類型。本文主要介紹了類對象通過拷貝函數(shù)進行初始化,分析類對象的內(nèi)存模型,以及通過this指針實現(xiàn)更復(fù)雜的功能。最后介紹了析構(gòu)函數(shù)的基礎(chǔ)知識2021-06-06Visual Studio調(diào)試C/C++教程指南
VisualStudio是微軟開發(fā)的一款集成開發(fā)環(huán)境軟件,本文主要介紹了Visual Studio調(diào)試C/C++教程指南,熟悉地掌握基于VS的C/C++調(diào)試技術(shù),可以大幅提升調(diào)試性能,感興趣的可以了解一下2024-06-06解析C++中的for循環(huán)以及基于范圍的for語句使用
這篇文章主要介紹了解析C++中的for循環(huán)以及基于范圍的for語句使用,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2016-01-01C++實現(xiàn)LeetCode(57.插入?yún)^(qū)間)
這篇文章主要介紹了C++實現(xiàn)LeetCode(57.插入?yún)^(qū)間),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-07-07