position = 2
ID = 5 = 0000 0101 (in binary)
ID >> position = 0000 0001
0000 0001 & 0000 0001( 1 in binary ) = 1, because the furthest right bit is set.
int bitMask = 1 << position
int newNumber = bitMask & number
字符串 即:
int number = 5
int position = 2
int bitMask = 1 << position
// bitMask value becomes here:
// 1 << 2 (0001 << 2) becomes 0100
int newNumber = bitMask & number
// do AND (& bitwise) operation with bitMask and number
0100 & 0101 becomes 0100
newNumber = 4 (0100)
型 你可以返回true或false,如:
return ((bitMask & number) != 0)
// means if the new number is non-zero, it means the bit as position is 1 otherwise false.
5条答案
按热度按时间yrdbyhpb1#
字符串
将ID按位置右移会使位#position位于数字中最右边的位置。将其与按位AND
&
和1组合会告诉您该位是否已设置。型
of1yzvn42#
你想做一个位掩码,然后按位执行AND,这最终会看起来非常接近你所拥有的--使用shift来设置适当的位,使用
&
来执行按位运算。所以
字符串
其中
pos
的范围必须在0和7之间。如果你有最低有效位作为“位1”,那么你需要你的-1
,但我建议不要这样--这种位置的变化对我来说总是一个错误的来源。mmvthczy3#
获取整数中的第n位
字符串
pxy2qtax4#
在Java中,下面的代码可以很好地工作:
字符串
value
和x
可以是int
或long
(不需要相同)。非Java程序员注意事项:前面的表达式在Java中有效,因为在Java语言中,位移位运算符仅适用于右侧操作数的最低5位(或6位,如果是
long
)。这将隐式地将表达式转换为value << (~x & 31)
(或value << (~x & 63)
,如果value
是long
)。JavaScript:它也适用于javascript(和java一样,只应用最低5位的移位计数)。在javascript中,任何
number
都是32位的。特别是在C语言中,负移位计数会调用未定义的行为,所以这个测试不一定有效(尽管它可能有效,这取决于编译器/处理器的特定组合)。
yacmzcpb5#
要在任何位置获得钻头,只需执行以下步骤:
1.创建bitMask
在数字5中,位置是从右到左(由索引给出)Number(5)=| 0| 1| 0| 1|位置=| 3| 2| 1| 0|
现在你想得到第三个位置的位(index = 2)
字符串
即:
型
你可以返回true或false,如:
型