2016-04-03 88 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-对于正数是必需的)。