Objective c 这是一个多么简单的问题啊;在objc语法中是什么意思?

Objective c 这是一个多么简单的问题啊;在objc语法中是什么意思?,objective-c,xcode,Objective C,Xcode,在代码中,我发现了一些行: UIApplication *application = [UIApplication sharedApplication]; //1 application.applicationIconBadgeNumber = 0; //2 UIUserNotificationSettings *currentSettings = application.currentUserNotificationSettings; //3 BOOL badgeAllowed = curre

在代码中,我发现了一些行:

UIApplication *application = [UIApplication sharedApplication]; //1
application.applicationIconBadgeNumber = 0; //2
UIUserNotificationSettings *currentSettings = application.currentUserNotificationSettings; //3
BOOL badgeAllowed = currentSettings.types & UIUserNotificationTypeBadge; //4
我知道第1行到第3行是什么意思,但第4行是什么意思


它返回
BOOL
,但是如果我希望这两个部分都为真,那么应该是
&
而不是
&
。为什么只有一个
&
?这是什么意思?我想读一些关于它的内容,但我不知道它是什么。

&&
是一个逻辑运算符,并且

&
是一个按位运算符和

这意味着,只有当两个操作数都设置了该位时,才会设置结果数的每一位

在这种特殊情况下

currentSettings.types
是允许的通知类型的掩码(为每种类型设置一位)。 将其与
UIUserNotificationTypeBadge
进行ANDing将导致

  • 如果
    UIUserNotificationTypeBadge
    是掩码的一部分,则仅在结果中设置该特定位
  • 如果
    UIUserNotificationTypeBadge
    不是掩码的一部分,则结果将所有位设置为零
  • 然后将整数视为布尔值,这意味着非零=真,零=假

    最后一步可以显式编写(IMHO更好)


    &
    是C位AND运算符。它比较左右操作数的每一位,如果源位均为1和0,则将相应的结果位设置为1,否则为0。对于您的代码,位掩码
    UIUserNotificationTypeBadge
    用于检查是否在
    currentSettings.types
    中设置了单个位。在C中,所有非零值都被解释为true,因此如果
    currentSettings.types
    设置了
    UIUserNotificationTypeBadge
    badgeAllowed
    将为true,但不一定是
    1

    它是“C”运算符,表示二进制,如果两个操作数中都存在位,则运算符将一位复制到结果中。
    BOOL badgeAllowed = ((currentSettings.types & UIUserNotificationTypeBadge) != 0);