以下哪項返回63長(在Java中)以及如何?二進制標誌的十六進制組合
0x0
0x1
0x2
0x4
0x8
0x10
0x20
我正在使用NetworkManager API標誌(如果有幫助的話)。我從一個操作中獲得了63個,但不知道應該如何將返回值與描述相匹配。
由於
以下哪項返回63長(在Java中)以及如何?二進制標誌的十六進制組合
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))
{
}
PS:要了解爲什麼這個作品,this是關於二元標誌及其組合的不錯文章。
63(十進制)等於0x3F(十六進制)。所以63是以下所有標誌的組合:
0x20
0x10
0x08
0x04
0x02
0x01
這是你在找什麼?
我給你和克里斯一樣的答案:你的返回值0x63
看起來像是你在列表中提到的所有標誌的組合(除了0x0
)。
當處理標誌時,一個簡單的方法可以手工計算出哪些標誌被設置,即將所有數字轉換爲它們的二進制表示。如果你已經有十六進制的數字,這很容易,因爲每個數字對應四位。首先,你的號碼清單:
0x01 0x02 0x04 ... 0x20
| | | |
| | | |
V V V V
0000 0001 0000 0010 0000 0100 ... 0010 0000
現在,如果你把你的值63,這是0x3F
(= 3
* 16 + F
* 16 ,其中F
= 15)十六進制,它變爲:
0x3F
|
|
V
0011 1111
您很快就會看到低6位全部被設置,這是上述二進制數的「加法」組合(按位或)。
@stakx:當然,這只是一個錯字。對不起 - 修正 – 2010-01-09 08:34:32
@staks ...如果你這樣做,只需編輯它。現在是正確的,所以我+1了 – DJTripleThreat 2010-01-09 08:42:00
只是另一個很小的更正 - 0x02是從右邊第二位,而不是第三位。 – Chowlett 2010-01-09 09:15:22