了解按位运算符并对它们进行比较

总结 (对于想要使用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

上一篇: Understand about bitwise operator and comparing them

下一篇: Field packing to form a single byte