我正在寻找一些应该从int获得一个代码的代码部分 它如下:
private int getBit( int token, int pos){
return ( token & ( 1 << pos ) ) != 0 ? 1 : 0;
}
我的问题是为什么它不是以下(更简单)的方式呢?
return token & ( 1 << pos );
我希望它还会返回0
或1
我错了吗?第二个(我的)版本错了吗?
答案 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