В чем разница между 0 << 16 и 0 << 20? - PullRequest
4 голосов
/ 23 октября 2011

В чем разница между 0 << 16 и 0 << 20? Я нашел это в UIViewAnimationOptions. </p>

Ответы [ 5 ]

6 голосов
/ 23 октября 2011

Нет.Оба они равны 0

   UIViewAnimationOptionTransitionNone            = 0 << 20,
   UIViewAnimationOptionTransitionFlipFromLeft    = 1 << 20,
   UIViewAnimationOptionTransitionFlipFromRight   = 2 << 20,
   UIViewAnimationOptionTransitionCurlUp          = 3 << 20,
   UIViewAnimationOptionTransitionCurlDown        = 4 << 20,
   UIViewAnimationOptionTransitionCrossDissolve   = 5 << 20,
   UIViewAnimationOptionTransitionFlipFromTop     = 6 << 20,
   UIViewAnimationOptionTransitionFlipFromBottom  = 7 << 20,

Все настройки UIViewAnimationOptionTransition связаны с установкой битов 20-23.UIViewAnimationOptionTransitionNone равен нулю, однако он определен таким же образом, как и другие UIViewAnimationTransitions для согласованности.

Оба заданных значения равны нулю, что указывает на то, что они оба являются настройками по умолчанию, если вы не передадите флаг перехода, вы не получите переход по умолчанию.Но вы также можете указать это явно.

5 голосов
/ 23 октября 2011

0 << 16 смещает 16 бит влево, 0 << 20 смещает 20 бит.Оба значения заканчиваются на 0.

Я предполагаю, что это делается для ясности, точно так же, как sizeof (char) иногда используется в malloc.

4 голосов
/ 23 октября 2011

Игнорирование UIViewAnimationOptions part ...

  • Если ваши int имеют 16 бит или менее, оба выражения вызывают UB (в данном случае не может говорить о различиях)
  • если они имеют длину от 17 до 20 бит, 0 << 16 равно 0; 0 << 20 - это UB
  • если они имеют длину 21 бит или более, разницы нет

UB означает Неопределенное поведение .

3 голосов
/ 23 октября 2011

Тот факт, что их 2, указывает на то, что, устанавливая либо, вы на самом деле ничего не делаете.Однако вы помогаете самостоятельно документировать свой код, что значительно упрощает понимание другими, что то, что вы делаете, на самом деле то, что вы хотели сделать.

2 голосов
/ 23 октября 2011

Это битовые операторы сдвига влево.Общая суть в том, что используя такой синтаксис в определении перечисления, вы можете комбинировать несколько анимаций, используя побитовый оператор ИЛИ.Например, при передаче параметров анимации вы могли бы написать

(UIViewAnimationOptionRepeat | UIViewAnimationOptionCurveEaseInOut |  UIViewAnimationOptionTransitionCurlUp)

. Это приведет к скручиванию с кривой замедления и повторению после завершения.Это достигается путем просмотра отдельных битов в конечном результате.

BTW 0 << 16 равно UIViewAnimationOptionCurveEaseInOut и 0 << 20 равно UIViewAnimationOptionTransitionNone

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