了解按位运算符并对它们进行比较
总结 (对于想要使用tl; dr版本的人,可以跳到下面的问题):
我刚刚经历了这个问题:比较UIDeviceOrienation和UIInterfaceOrientation。 之后,我看了一下如何工作(因为我有时看过他们,但并不真正了解他们的工作方式)。
所以,我已经研究了什么是按位运算符,Objective-C中的枚举如何使用位,如何使用枚举。
(TL; DR)现在,这是我的问题:
比方说,我想检查我的UIInterfaceOrientation = Landscape(Left | Right)是否应该像这样使用它:
[UIApplication sharedApplication].statusBarOrientation ==
(UIInterfaceOrientationLandscapeLeft |
UIInterfaceOrientationLandscapeRight)
要么
[UIApplication sharedApplication].statusBarOrientation &
(UIInterfaceOrientationLandscapeLeft |
UIInterfaceOrientationLandscapeRight)
他们应该给出相同的结果吗? 还是不同? 哪一个更合适?
(在我的简单头脑中,如果没有错,那么第二个更合适)。
奖金问题
除了枚举之外,还有其他地方可以有效地使用按位移位操作符吗?
这取决于你想要做什么:
第一种方法意味着:
UIInterfaceOrientationLandscapeLeft和UIInterfaceOrientationLandscapeRight已设置,并且没有设置其他选项(即使使用不同的语义)。
这永远不会是真的,因为UIInterfaceOrientationLandscapeLeft和UIInterfaceOrientationLandscapeRight是互斥的。
第二种方法意味着:
UIInterfaceOrientationLandscapeLeft或UIInterfaceOrientationLandscapeRight已设置,其他选项将被忽略。
可能这是你想要做的。
但是你应该真的阅读一些关于位操作的东西。 网络中有大量的教程。 你也可以使用每个教程处理C。
奖金Q:
一个。 我得到的奖金是多少?
湾 是的,你不需要enum
来声明常量。 你可以简单地用全局常量来做到这一点:
const int Option1 = 1 << 0;
const int Option2 = 1 << 1;
…
C。 除此之外,您还可以通过位操作来完成一些算术魔法,比如分割和乘以2的幂数,检查数字是偶数还是奇数......
链接地址: http://www.djcxy.com/p/72665.html