0<<<< 16和0<< 20?

时间:2011-10-23 13:41:31

标签: objective-c c

0<<< 16和0<< 20?我在UIViewAnimationOptions中找到了它。

5 个答案:

答案 0 :(得分:6)

没有。他们都是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相同。

两个给定值均为零,表示它们都是默认设置,如果未传递转换标志,则默认情况下不会转换。但您也可以明确指定。

答案 1 :(得分:5)

0 << 16左移16位,0 << 20移位20位。两人最终都是0。

我猜它是为了清晰起见,就像有时在malloc中使用sizeof(char)一样。

答案 2 :(得分:4)

忽略 UIViewAnimationOptions 部分......

  • 如果您的int是16位或更少,则两个表达式都会调用UB(在这种情况下不能说出差异)
  • 如果长度在17到20位之间,则0 << 16为0; 0 << 20是UB
  • 如果它们是21位或更长,则没有区别

UB表示Undefined Behaviour

答案 3 :(得分:3)

其中有2个表明通过设置你实际上什么也没做。但是,您有助于自我记录您的代码,这使得其他人更容易理解您正在做的事实上是您的意图。

答案 4 :(得分:2)

他们是按位左移操作员。一般要点是,通过在枚举定义中使用这样的语法,您可以使用按位OR运算符组合多个动画。例如,传入动画选项时,您可以编写

(UIViewAnimationOptionRepeat | UIViewAnimationOptionCurveEaseInOut |  UIViewAnimationOptionTransitionCurlUp)

它会以易于进出的曲线进行卷曲,并在完成时重复。这是通过查看最终结果中的各个位来完成的。

BTW 0 << 16UIViewAnimationOptionCurveEaseInOut0 << 20UIViewAnimationOptionTransitionNone