首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS中的按位OR

iOS中的按位OR
EN

Stack Overflow用户
提问于 2011-07-03 01:46:49
回答 4查看 1.8K关注 0票数 1
代码语言:javascript
复制
enum {
   UIViewAnimationOptionLayoutSubviews            = 1 <<  0,
   UIViewAnimationOptionAllowUserInteraction      = 1 <<  1,
   UIViewAnimationOptionBeginFromCurrentState     = 1 <<  2,
   UIViewAnimationOptionRepeat                    = 1 <<  3,
   UIViewAnimationOptionAutoreverse               = 1 <<  4,
   UIViewAnimationOptionOverrideInheritedDuration = 1 <<  5,
   UIViewAnimationOptionOverrideInheritedCurve    = 1 <<  6,
   UIViewAnimationOptionAllowAnimatedContent      = 1 <<  7,
   UIViewAnimationOptionShowHideTransitionViews   = 1 <<  8,

   UIViewAnimationOptionCurveEaseInOut            = 0 << 16,
   UIViewAnimationOptionCurveEaseIn               = 1 << 16,
   UIViewAnimationOptionCurveEaseOut              = 2 << 16,
   UIViewAnimationOptionCurveLinear               = 3 << 16,

   UIViewAnimationOptionTransitionNone            = 0 << 20,
   UIViewAnimationOptionTransitionFlipFromLeft    = 1 << 20,
   UIViewAnimationOptionTransitionFlipFromRight   = 2 << 20,
   UIViewAnimationOptionTransitionCurlUp          = 3 << 20,
   UIViewAnimationOptionTransitionCurlDown        = 4 << 20,
};
typedef NSUInteger UIViewAnimationOptions;

这个表达式的确切含义是:UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse

UIViewAnimationOptionRepeat的值等于8(在仓位10000中),UIViewAnimationOptionAutoreverse等于16(在仓位1000中)。所以我认为表达式UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse应该生成16( -> 10000) UIViewAnimationOptionReverse。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-07-03 01:52:37

UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse被称为“面具”。

如果你有一个UIViewAnimationOptions类型的变量,就说:

代码语言:javascript
复制
 UIViewAnimationOptions a;

您可以按如下方式对其应用遮罩:

代码语言:javascript
复制
 bool b = a && (UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse)

来确定a是否“包含”这两个标志。如果

代码语言:javascript
复制
a == 0x0000001;

然后

代码语言:javascript
复制
b == false;

如果

代码语言:javascript
复制
a == 0x0101001;  //-- completely arbitrary mask

然后

代码语言:javascript
复制
 b == true;

因此,您实际上对UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse的计算结果不感兴趣,而只对将该类型的值与您感兴趣的检查标志进行逻辑and运算的结果感兴趣。

票数 1
EN

Stack Overflow用户

发布于 2011-07-03 01:53:20

操作|由真值表定义

代码语言:javascript
复制
   | 0 | 1  
---+---+---
 0 | 0 | 1
 1 | 1 | 1

也就是说,仅当x == 0y == 0都存在时才使用x | y == 0|运算符同时处理机器字的所有位。所以

代码语言:javascript
复制
  001000   (8)
| 010000  (16)
  ------------
  011000  (24)
票数 3
EN

Stack Overflow用户

发布于 2011-07-03 01:54:24

这些位是或的:

代码语言:javascript
复制
UIViewAnimationOptionRepeat      = 1 << 3 = 8  = 01000 in binary
UIViewAnimationOptionAutoreverse = 1 << 4 = 16 = 10000 in binary

   01000
OR 10000
--------
   11000

二进制中的11000是16 +8= 24 -设置了第三和第四位的整数(从0开始计数)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6558600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档