2016-04-03 107 views
-6

能否請您解釋一下這是怎麼回事在此代碼(它是如何乘以在代碼中的註釋是說4):解釋此C#代碼,請

public static int GetNextSize(int i) 
    { 
    //multiply it by four and make sure it is positive 
    return i > 0 ? i << 2 : ~(i << 2) + 1; 
    } 

有沒有更好或更清潔的方式做這個?或者這是最合適的嗎?

此外,任何這種(或這種類型的)代碼會有幫助的實際情況?

謝謝。

+1

除此之外,這看起來不像PHP代碼。它只是:'x> 0' - >返回'x * 4',否則當x爲負時:返回'x * -1 * 4'。只需要一點點操作員就可以做到。 – Rizier123

+1

由一些人爲自己寫的切肉刀好 – 2016-04-03 21:12:50

+2

1好像是C#,不是PHP? – RobIII

回答

2

?是三元運算符,實際上是可回收if/else語句

if (i>0) 
    return i multiplied by four (bitshift to the left two) 
else 
    return negative i multiplied by four 

~x+1意味着二進制補碼,並添加一個,有效地使其成爲負數。 x這裏碰巧是i<<2

它看起來像一些優化的類C代碼給我。

對於#2,你指的是邏輯OR運算符嗎?
a || b=c
由於首先計算,如果a爲真,所以b=c只計算是a是假的總表達式爲真。這實際上意味着if not a: b=c

+0

運營商第二代碼運營商稱爲什麼? –

+1

'〜'是否定運算符,如果這就是你所指的 – RobIII

1

i如果是正的:

它將比特由兩個向左移動,這是有效地與由4

乘以如果i不爲正(爲負或零),它將再次乘以4,然後否定所有位(這就是~所做的)並且加1(由於2s complement-對於正數是必需的)。