2016-04-03 10 views
-6

あなたはこのコードで何が起こっているか説明していただけます。この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

自分自身のために食糧師に何人かが書いた –

+2

1 PHPではなくC#と思われる? – 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は2の補数を意味し、1を追加し、効果的に負の数作ります。 xはここにあります。i<<2

私には最適化されたCのようなコードがあります。

#2の場合は、論理OR演算子を参照していますか?
a || b=c
最初に評価されているのでaが真であるので、唯一評価さb=caが偽である場合、合計式は真であろう。負(

iが正でない場合、それは効果的に4

を掛けると同じで左に2でビットをシフトする:これは、効果的iが正の場合if not a: b=c

+0

オペレータの2番目のコード演算子とは何ですか? –

+1

'〜'はあなたが参照しているものであれば否定演算子です – RobIII

1

手段または0)、再び4を掛けた後、すべてのビットを無効にして(つまり~の場合)、1を加算します(正の数の場合は2s complementのため)。

関連する問題