2014-10-22 188 views
-2

我想了解C中的if-else語句++的條件,這裏就是這句話是在片段(不是它的簡寫版):&運算符是什麼意思?

for (int i = 0; i < 8; ++i) 
    { 
     Point newCenter = center; 
     newCenter.x += oneEighth.x * (i&4 ? 0.5f : -0.5f); 
    } 

我明白了0.5F持有如果條件是真的,否則爲-0.5f,但是i&4是什麼意思?

+0

它是按位「和」運算符。 http://en.wikipedia.org/wiki/Bitwise_operation這裏與'?:'操作符無關 – 2014-10-22 12:11:01

+0

您諮詢過哪些C++參考文檔,這些告訴了您什麼? [這是一些](http://en.cppreference.com/)。 – Angew 2014-10-22 12:21:39

+2

其實,完整的答案應該是「這取決於上下文」。用作一元運算符,它是「地址」。作爲一個二元運算符,它確實是一個按位與。順便說一句 - 這兩個結果都可以很容易地找到谷歌找到的任何C++運算符表。 – Leeor 2014-10-22 12:28:24

回答

2

這裏使用了兩件事,首先它使用按位AND運算符&,這取兩個整數的二進制表示(i4)和計算這兩者的按位「與」(即對於所得數字的二進制表示中的每個位置,我們查看兩個參數中相應位置的位,並將結果位設置爲1,當且僅當參數是1),其次,它使用隱式intbool轉換,如果整數不等於0,則返回true

例如,如果我們有i=7,然後在補這個內部按位表示是:

/*24 0s*/ 0 0 0 0 0 1 1 1 

4二進制補碼錶示是/*24 0s*/ 0 0 0 0 0 1 0 0等位與是/*24 0s*/ 0 0 0 0 0 1 0 0和這不等於零,它被暗示轉換爲true,所以條件得到滿足。

另外,如果我們考慮i=2,那麼我們有內部表示:

/*24 0s*/ 0 0 0 0 0 0 1 0 

,因此按位並給出/*24 0s*/ 0 0 0 0 0 0 0 0,因此條件沒有得到滿足。

1

運算符是按位與。 按位二進制AND以二進制形式對數字中每個位置的位進行邏輯AND。

因此,在你的代碼中,當我是4,5,6,7時,我的& 4是正確的,因爲4的基數2表示爲100. i & 4將會是true,當base-2表示爲我在第3個位置有一個(左右)

+0

什麼'上面的桌子? – user2079303 2014-10-22 12:12:41

+0

這個數字列表並不是所有可能的數字。 – 2014-10-22 12:14:54

+0

是的,但post中的for語句是for(int i = 0; i <8; ++ i),這就是爲什麼我只列出小於8的數字 – 2014-10-22 12:16:21