ios_type ^ = 0x1, что это значит? - PullRequest
2 голосов
/ 07 января 2012
  - (void)methedName{
      if(){
        _type ^=0x1;
      }
    }

Что это значит?

Ответы [ 3 ]

10 голосов
/ 07 января 2012

Заголовок вашего вопроса и ваш код делают разные вещи.

0x1 означает «1», интерпретируемый как шестнадцатеричные цифры.Это то же самое, что и 1 в десятичном виде.

Так что _type =0x1 просто устанавливает _type в 1.

^ означает оператор XOR (исключающий-или).

^= означает, что вычисляется XOR левой части с правой стороны и присваивается результат левой стороне.Другими словами, ios_type ^= 0x1 - это то же самое, что и ios_type = ios_type ^ 0x1.

Так что ios_type ^= 0x1 переключает 1 бит ios_type.

4 голосов
/ 07 января 2012
ios_type ^= 0x1

эквивалентно

ios_type = (ios_type ^ 0x1)

. Устанавливает ios_type в исходное значение XOR с постоянным значением 1. То есть переключает 1 бит.* Таблица правдивости XOR (Исключительно-ИЛИ):

 INPUT    OUTPUT
 A   B    A XOR B 

 0   0      0
 0   1      1
 1   0      1
 1   1      0

Ссылка: Исключительно ИЛИ

1 голос
/ 07 января 2012

Отражает наименее значимый бит ios_type, поэтому

10011010 ^ 00000001 ==> 10011011
10100111 ^ 00000001 ==> 10100110
...