为什么它会像这样得到一点?

时间:2012-05-22 20:26:53

标签: java bit-manipulation bit

我正在寻找一些应该从int获得一个代码的代码部分 它如下:

private int getBit( int token, int pos){  
   return ( token & ( 1 << pos ) ) != 0 ? 1 : 0;   
}

我的问题是为什么它不是以下(更简单)的方式呢?

return token & ( 1 << pos );   

我希望它还会返回01 我错了吗?第二个(我的)版本错了吗?

4 个答案:

答案 0 :(得分:3)

您的版本不会返回位置pos处的位值。它返回值0或2 ^(pos-1)。

答案 1 :(得分:2)

您的版本返回0或1<<pos

如果在布尔上下文中使用它将无关紧要。但它可能不然。

答案 2 :(得分:2)

你的版本错了。执行时

return token & ( 1 << pos );

如果它不为零,那么除了pos位清零之外,每个位都会得到一个int,因为这是&运算符右侧的数字。如果pos==0,这显然只有1。

这是因为&运算符只是在两个int s中的相应位之间进行按位和运算。由于1 << pos在最低位置之外的位置1位,token可能是int,因此结果也可能位于1位最低位置以外的位置,使其大于1

答案 3 :(得分:2)

当然,你可以按照

的顺序使用
(token >> pos) & 1