您将使用什么方法来确定表示2^x的位是1还是0?
发布于 2009-07-07 13:42:54
我会使用:
if ((value & (1L << x)) != 0)
{
// The bit was set
}
(您可能可以使用较少的括号,但我从来不记得按位操作的优先顺序。)
发布于 2009-07-07 14:05:01
另一种选择:
if (BigInteger.valueOf(value).testBit(x)) {
// ...
}
发布于 2009-07-07 13:46:24
您还可以使用
bool isSet = ((value>>x) & 1) != 0;
编辑:"(value>>x) & 1
“和"value & (1<<x)
”之间的区别取决于当x大于"value“类型的大小(在您的例子中为32)时的行为。
在这种情况下,使用"(value>>x) & 1
“会得到值的符号,而使用"value & (1<<x)
”会得到0(如果x太大,有时获取位符号是很有用的)。
如果您希望在这种情况下使用0,则可以使用">>>
“运算符,如果是">>
”
因此,"((value>>>x) & 1) != 0
“和"(value & (1<<x)) != 0
”是完全等价的
https://stackoverflow.com/questions/1092411
复制相似问题