欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C/CPP運算優(yōu)先級的坑及解決

 更新時間:2023年08月04日 16:06:34   作者:_不會dp不改名_  
這篇文章主要介紹了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)文章

最新評論