位運算子 優先順序 折半搜尋

2021-09-06 17:33:56 字數 2714 閱讀 7134

看程式設計珠璣,深知二分搜尋的用處之大,自己寫了一遍,竟然出了死迴圈。**如下:

1

int bsearch(int *data, int val,int left, int

right)213

else

14return -1

;15 }

感覺沒有特殊的地方,經過除錯發現,第5行,當left = 5 ,right = 9時,mid = 5 + (9-5)>>1;結果是4 !!!!為何不是7? 運算子優先順序,+號 高於 位運算子。 相當於 (5 + (9-5))>>1 ,剛好陣列內data[4] < val ,造成死迴圈。。。

附1、折半搜尋的遞迴和非遞迴實現:

1 #include 2 #include 3

4using

namespace

std;56

//遞迴實現

7int bsearch(int *data, int val,int left, int

right)819

else

20return -1;21

}22//非遞迴實現

23int bsearch2(int *data,int val,int left,int

right)

2435

return -1;36

}3738int

main()39;

43 sort(d,d+10

);44 printf("

%d\n

",bsearch2(d,3,0,9));//

呼叫時,left為0,right為n-1

4546

return

0;

47 }

附2、運算子優先順序:

優先順序運算子

名稱或含義

使用形式

結合方向說明1

陣列下標

陣列名[常量表示式]

左到右()

圓括號(表示式)/函式名(形參表)

.成員選擇(物件)

物件.成員名

->

成員選擇(指標)

物件指標->成員名2-

負號運算子

-表示式

右到左單目運算子

(型別)

強制型別轉換

(資料型別)表示式

++自增運算子

++變數名/變數名++

單目運算子

--自減運算子

--變數名/變數名--

單目運算子

*取值運算子

*指標變數

單目運算子

&取位址運算子

&變數名

單目運算子

!邏輯非運算子

!表示式

單目運算子

~按位取反運算子

~表示式

單目運算子

sizeof

長度運算子

sizeof(表示式)3/

除表示式/表示式

左到右雙目運算子*乘

表示式*表示式

雙目運算子

%餘數(取模)

整型表示式/整型表示式

雙目運算子4+

加表示式+表示式

左到右雙目運算子-減

表示式-表示式

雙目運算子

5<<

左移變數《表示式

左到右雙目運算子

>>

右移變數》表示式

雙目運算子

6>

大於表示式》表示式

左到右雙目運算子

>=

大於等於

表示式》=表示式

雙目運算子

<

小於表示式《表示式

雙目運算子

<=

小於等於

表示式<=表示式

雙目運算子7==

等於表示式==表示式

左到右雙目運算子

!=不等於

表示式!= 表示式

雙目運算子8&

按位與表示式&表示式

左到右雙目運算子9^

按位異或

表示式^表示式

左到右雙目運算子10|

按位或表示式|表示式

左到右雙目運算子

11&&

邏輯與表示式&&表示式

左到右雙目運算子

12||

邏輯或表示式||表示式

左到右雙目運算子

13?:

條件運算子

表示式1? 表示式2: 表示式3

右到左三目運算子14=

賦值運算子

變數=表示式

右到左/=

除后賦值

變數/=表示式

*=乘後賦值

變數*=表示式

%=取模後賦值

變數%=表示式

+=加後賦值

變數+=表示式

-=減後賦值

變數-=表示式

<<=

左移後賦值

變數<<=表示式

>>=

右移後賦值

變數》=表示式

&=按位與後賦值

變數&=表示式

^=按位異或後賦值

變數^=表示式

|=按位或後賦值

變數|=表示式15,

逗號運算子

表示式,表示式,…

左到右從左向右順序運算

上表參考:  

位運算子 優先順序 折半搜尋

看程式設計珠璣,深知二分搜尋的用處之大,自己寫了一遍,竟然出了死迴圈。如下 1 int bsearch int data,int val,int left,int right 213 else 14return 1 15 感覺沒有特殊的地方,經過除錯發現,第5行,當left 5 right 9時,m...

運算子優先順序 C 運算子優先順序

c 運算子優先順序 優先順序運算子 描述方向1 scope resolution 範圍解析 left to right 2 suffix postfix increment and decrement 字首 字尾遞增和遞減 function call 函式呼叫 array subscripting ...

運算子優先順序 Python 運算子優先順序

python 運算子優先順序 運算子描述 lambda lambda表示式 or布林 或 and布林 與 not x 布林 非 in,not in 成員測試 is,is not 同一性測試 比較 按位或 按位異或 按位與 移位 加法與減法 乘法 除法與取餘 x,x 正負號 x 按位翻轉 指數 x.a...