以下哪个方法可以在Java中返回长整型63?如何实现?
0x0
0x1
0x2
0x4
0x8
0x10
0x20
我正在使用NetworkManager API标志,如果有帮助的话。我从其中一个操作中获取到了63,但不知道如何将返回值与描述匹配。
谢谢
63是32 | 16 | 8 | 4 | 2 | 1
,其中|
是二进制或运算符。
换句话说(以十六进制表示):63(即0x3F)是0x20 | 0x10 | 0x8 | 0x4 | 0x2 | 0x1
。如果你把它们都转换成二进制,很明显:
0x20 : 00100000
0x10 : 00010000
0x08 : 00001000
0x04 : 00000100
0x02 : 00000010
0x01 : 00000001
63表示:
0x3F : 00111111
如果你得到了一些返回状态并想知道它的含义,那么你需要使用二进制与运算。例如:if (status & 0x02)
{
}
如果返回状态中打开了0x02标志(也就是从右边数第二个比特位),则将执行。通常,这些标志都有名称(描述),因此上面的代码将会读取类似于:
if (status & CONNECT_ERROR_FLAG)
{
}
再次强调,状态可以是一堆东西的组合:
// Check if both flags are set in the status
if (status & (CONNECT_ERROR_FLAG | WRONG_IP_FLAG))
{
}
P.S.:要了解为什么这有效,请参阅这篇关于二进制标志及其组合的好文章。
0x63
似乎是你列表中提到的所有标志的组合(除了0x0
)。 0x01 0x02 0x04 ... 0x20
| | | |
| | | |
V V V V
0000 0001 0000 0010 0000 0100 ... 0010 0000
现在,如果你拿到数值63,它在十六进制中表示为0x3F
(= 3
* 161 + F
* 160,其中F
= 15),那么它就变成了:
0x3F
|
|
V
0011 1111
您很快就会发现,低6位都被设置了,这是上述二进制数的“加法”组合(按位或)。
63(十进制)等于0x3F(十六进制)。因此,63是以下所有标志的组合:
0x20
0x10
0x08
0x04
0x02
0x01
这是你在寻找的吗?