java 如何从一个字节中获取某个位置的位的值?

yfjy0ee7  于 5个月前  发布在  Java
关注(0)|答案(5)|浏览(42)

如果我有一个字节,该方法将如何在某个位置检索一个位?
这是我所知道的,我不认为它起作用。

public byte getBit(int position) {
    return (byte) (ID >> (position - 1));
}

字符串
其中ID是我从中检索信息的字节的名称。

yrdbyhpb

yrdbyhpb1#

public byte getBit(int position)
{
   return (ID >> position) & 1;
}

字符串
将ID按位置右移会使位#position位于数字中最右边的位置。将其与按位AND &和1组合会告诉您该位是否已设置。

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.

of1yzvn4

of1yzvn42#

你想做一个位掩码,然后按位执行AND,这最终会看起来非常接近你所拥有的--使用shift来设置适当的位,使用&来执行按位运算。
所以

return ((byte)ID) & (0x01 << pos) ;

字符串
其中pos的范围必须在0和7之间。如果你有最低有效位作为“位1”,那么你需要你的-1,但我建议不要这样--这种位置的变化对我来说总是一个错误的来源。

mmvthczy

mmvthczy3#

获取整数中的第n位

return ((num >> (n-1)) & 1);

字符串

pxy2qtax

pxy2qtax4#

在Java中,下面的代码可以很好地工作:

if (value << ~x < 0) {
   // xth bit set
} else {
   // xth bit not set
}

字符串
valuex可以是intlong(不需要相同)。

非Java程序员注意事项:前面的表达式在Java中有效,因为在Java语言中,位移位运算符仅适用于右侧操作数的最低5位(或6位,如果是long)。这将隐式地将表达式转换为value << (~x & 31)(或value << (~x & 63),如果valuelong)。
JavaScript:它也适用于javascript(和java一样,只应用最低5位的移位计数)。在javascript中,任何number都是32位的。

特别是在C语言中,负移位计数会调用未定义的行为,所以这个测试不一定有效(尽管它可能有效,这取决于编译器/处理器的特定组合)。

yacmzcpb

yacmzcpb5#

要在任何位置获得钻头,只需执行以下步骤:
1.创建bitMask

  1. Do &(AND)位运算
    在数字5中,位置是从右到左(由索引给出)Number(5)=| 0| 1| 0| 1|位置=| 3| 2| 1| 0|
    现在你想得到第三个位置的位(index = 2)
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.

相关问题