我正在寻找应该从 int 中获取单个位的代码的一部分。
如下:
private int getBit( int token, int pos){
return ( token & ( 1 << pos ) ) != 0 ? 1 : 0;
}
我的问题是它为什么不按照以下(更简单)的方式来做呢?
return token & ( 1 << pos );
我希望它也会返回一个0
or 1
。
我错了吗?第二个(我的)版本错了吗?
我正在寻找应该从 int 中获取单个位的代码的一部分。
如下:
private int getBit( int token, int pos){
return ( token & ( 1 << pos ) ) != 0 ? 1 : 0;
}
我的问题是它为什么不按照以下(更简单)的方式来做呢?
return token & ( 1 << pos );
我希望它也会返回一个0
or 1
。
我错了吗?第二个(我的)版本错了吗?
您的版本不返回位置 pos 的位值。它返回值 0 或 2^(pos-1)。
您的版本返回 0 或1<<pos
.
如果在布尔上下文中使用它并不重要。但它可能不是这样。
你的版本不对。当你执行
return token & ( 1 << pos );
如果它不为零,那么除了pos
归零的位之外的每一位都会得到一个 int,因为这是运算符右侧的数字&
。这显然只会是 1 如果pos==0
。
发生这种情况是因为&
运算符只是在两个int
s 中的相应位之间进行按位和运算。由于在最低位以外的位置1 << pos
有一个位并且可能是 any ,因此结果也可能在最低位以外的位置有一个位,使其大于。1
token
int
1
1
当然,您可以使用以下顺序的东西
(token >> pos) & 1