0

我正在寻找应该从 int 中获取单个位的代码的一部分。
如下:

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

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

return token & ( 1 << pos );   

我希望它也会返回一个0or 1
我错了吗?第二个(我的)版本错了吗?

4

4 回答 4

3

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

于 2012-05-22T20:29:52.623 回答
2

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

如果在布尔上下文中使用它并不重要。但它可能不是这样。

于 2012-05-22T20:29:06.577 回答
2

你的版本不对。当你执行

return token & ( 1 << pos );

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

发生这种情况是因为&运算符只是在两个ints 中的相应位之间进行按位和运算。由于在最低位以外的位置1 << pos有一个位并且可能是 any ,因此结果也可能在最低位以外的位置有一个位,使其大于。1tokenint11

于 2012-05-22T20:31:44.360 回答
2

当然,您可以使用以下顺序的东西

(token >> pos) & 1
于 2012-05-22T20:32:55.980 回答