что подразумевается под условием swift, если ((status & 0x3F) == 1) {} - PullRequest
0 голосов
/ 04 июля 2018

if ((status & 0x3F) == 1) {} .. статус является переменным на быстром языке. что означает об этом условии, а среднее и (status & 0x3F) возвращаемое значение

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

& - это оператор побитового И . Он сравнивает биты двух операндов и устанавливает соответствующий бит на 1, если он равен 1 в обоих операндах, или на 0, если один или оба * 0.

Итак, это утверждение:

((status & 0x3F) == 1)

объединяет status с 0b111111 (двоичный эквивалент 0x3F и проверяет, является ли результат в точности 1. Это будет верно только в том случае, если последние 6 битов status равны 0b000001.


В этом if:

if( (dtc24_state[2] & 0x8) == 0x8 ) {
    self.haldexABCDTC24State.text = status_str + " - UNKNOWN"
    self.haldexABCDTC24State.textColor = text_color
    active_or_stored_dtc = true
}

dct24_state - массив значений. Значение dct24_state[2] объединяется с 0x8 или 0b1000 и сравнивается с 0x8. Это проверяет, установлен ли 4-й бит справа. Остальное не важно. Если установлен 4-й бит справа, if имеет значение true и выполняется кодовый блок.

0 голосов
/ 04 июля 2018

0x3F равно 111111. Итак, это значит:

для каждого бита yourNumber в представлении двоичной системы используйте and метод. Таким образом усекает левую часть числа. и результат сравнивается с 1.

, например

7777 равно 1111001100001 после выполнения and это число преобразуется в

100001. Таким образом, результат false.

Но для 7745 (1111001000001) результат равен 1. Результат true.

Правило для функций 'и': 0 & 0 = 0 ; 0 & 1 = 0; 1 & 0 = 1; 1 & 1 = 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...