我想了解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
是什麼意思?
我想了解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
是什麼意思?
這裏使用了兩件事,首先它使用按位AND運算符&
,這取兩個整數的二進制表示(i
和4
)和計算這兩者的按位「與」(即對於所得數字的二進制表示中的每個位置,我們查看兩個參數中相應位置的位,並將結果位設置爲1
,當且僅當參數是1
),其次,它使用隱式int
到bool
轉換,如果整數不等於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
,因此條件沒有得到滿足。
運算符是按位與。 按位二進制AND以二進制形式對數字中每個位置的位進行邏輯AND。
因此,在你的代碼中,當我是4,5,6,7時,我的& 4是正確的,因爲4的基數2表示爲100. i & 4將會是true,當base-2表示爲我在第3個位置有一個(左右)
什麼'上面的桌子? – user2079303 2014-10-22 12:12:41
這個數字列表並不是所有可能的數字。 – 2014-10-22 12:14:54
是的,但post中的for語句是for(int i = 0; i <8; ++ i),這就是爲什麼我只列出小於8的數字 – 2014-10-22 12:16:21
它是按位「和」運算符。 http://en.wikipedia.org/wiki/Bitwise_operation這裏與'?:'操作符無關 – 2014-10-22 12:11:01
您諮詢過哪些C++參考文檔,這些告訴了您什麼? [這是一些](http://en.cppreference.com/)。 – Angew 2014-10-22 12:21:39
其實,完整的答案應該是「這取決於上下文」。用作一元運算符,它是「地址」。作爲一個二元運算符,它確實是一個按位與。順便說一句 - 這兩個結果都可以很容易地找到谷歌找到的任何C++運算符表。 – Leeor 2014-10-22 12:28:24