2013-10-25 118 views
0

以C保證1/2 == 0?我需要這樣的實現二進制搜索:在C中,是否保證1/2 == 0?

/* 
* len is the array length 
* ary is an array of ptrs 
* f is a compare function 
* found is a ptr to the found element in the array 
* both i and offset are unsigned integers, used as indexes 
*/ 

for(i = len/2; !found && i < len; i += offset) { 
    res = f(c->ary[i]); 

    if (res == 0) { 
     found = c->ary[i]; 
    } 
    else { 
     offset = (res < 0 ? -1 : 1) * (i/2); 
     if (!offset) { 
      i = len+1; 
     } 
    } 
} 

回答

10

是的,這是有保證的。據到C ISO規格,§ 6.5.5/5:

/運算的結果是由第二 從所述第一操作數的除法的商;

1/2商是0,所以1/2 == 0保證在C.

希望這有助於爲真!

+2

我建議你不要在未來回答明顯的重複... – 2013-10-25 20:12:20

+1

@ H2CO3-對不起......我不知道這是重複的。我其實覺得這很有趣,因爲在我見過的每個C實現中,我都知道這個分區是整數除法,但我不知道C規範是否能保證這一點。我希望這個答案能夠提供一個超越「它在我嘗試過的每一個編譯器上都有效」的權威參考。 – templatetypedef

+2

公平點。標準保證這一點,但要小心:這樣簡單的問題*一般*已經被問及答覆,甚至多次。 – 2013-10-25 20:27:58

相關問題