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 (т. Е. 2-й бит справа) включен в возвращаемом состоянии. Чаще всего эти флаги имеют имена (описания), поэтому приведенный выше код будет выглядеть примерно так:
if (status & CONNECT_ERROR_FLAG)
{
}
Опять же, статус может быть комбинацией вещей:
// Check if both flags are set in the status
if (status & (CONNECT_ERROR_FLAG | WRONG_IP_FLAG))
{
}
P.S .: Чтобы узнать, почему это работает, это - хорошая статья о бинарных флагах и их комбинациях.