如果我有一个字节,该方法将如何在某个位置检索一个位?这是我所知道的,我不认为它起作用。
public byte getBit(int position) { return (byte) (ID >> (position - 1));}
public byte getBit(int position) {
return (byte) (ID >> (position - 1));
}
字符串其中ID是我从中检索信息的字节的名称。
ID
yrdbyhpb1#
public byte getBit(int position){ return (ID >> position) & 1;}
public byte getBit(int position)
{
return (ID >> position) & 1;
字符串将ID按位置右移会使位#position位于数字中最右边的位置。将其与按位AND &和1组合会告诉您该位是否已设置。
&
position = 2ID = 5 = 0000 0101 (in binary)ID >> position = 0000 00010000 0001 & 0000 0001( 1 in binary ) = 1, because the furthest right bit is set.
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.
型
of1yzvn42#
你想做一个位掩码,然后按位执行AND,这最终会看起来非常接近你所拥有的--使用shift来设置适当的位,使用&来执行按位运算。所以
return ((byte)ID) & (0x01 << pos) ;
字符串其中pos的范围必须在0和7之间。如果你有最低有效位作为“位1”,那么你需要你的-1,但我建议不要这样--这种位置的变化对我来说总是一个错误的来源。
pos
-1
mmvthczy3#
获取整数中的第n位
return ((num >> (n-1)) & 1);
字符串
pxy2qtax4#
在Java中,下面的代码可以很好地工作:
if (value << ~x < 0) { // xth bit set} else { // xth bit not set}
if (value << ~x < 0) {
// xth bit set
} else {
// xth bit not set
字符串value和x可以是int或long(不需要相同)。
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位的。
value << (~x & 31)
value << (~x & 63)
number
特别是在C语言中,负移位计数会调用未定义的行为,所以这个测试不一定有效(尽管它可能有效,这取决于编译器/处理器的特定组合)。
yacmzcpb5#
要在任何位置获得钻头,只需执行以下步骤:1.创建bitMask
int bitMask = 1 << positionint newNumber = bitMask & number
int bitMask = 1 << position
int newNumber = bitMask & number
字符串即:
int number = 5int position = 2int bitMask = 1 << position// bitMask value becomes here:// 1 << 2 (0001 << 2) becomes 0100int newNumber = bitMask & number// do AND (& bitwise) operation with bitMask and number0100 & 0101 becomes 0100newNumber = 4 (0100)
int number = 5
int position = 2
// bitMask value becomes here:
// 1 << 2 (0001 << 2) becomes 0100
// 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.
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,如:
型