【问题标题】:what does mean these two operator "|=" and "|"这两个运算符“|=”和“|”是什么意思
【发布时间】:2013-07-03 10:05:45
【问题描述】:

我在应用程序源代码中找到了这一行,但我无法弄清楚两个标志之间的按位或包含运算符“|”的含义。

notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);

下面一行中这个运算符|=的含义我也没有理解:

notification.flags |= Notification.FLAG_AUTO_CANCEL;

有人可以帮帮我。

【问题讨论】:

标签: java android


【解决方案1】:

我已经开始回答,而没有其他人回答,所以我还是决定完成它......

管道和符号| and & 分别执行ORAND 操作。

您将习惯看到||&&,它们执行布尔逻辑ORAND,使用单个| or & 是按位运算。

如果您查看标志文档,clear_top 的标志是 0x04000000,single_top 是 0x20000000。

因此,您正在执行的操作是: 0x04000000 或 0x20000000 = 0x24000000

在使用两个所需标志的意图中设置所需的位。

a |= b 运算符是 a = a | b 的重载等价物,类似于 +=--++ 的用法,您应该习惯于在别处看到它们

【讨论】:

  • 谢谢,这就是我想要的。我已经阅读了 android 文档,但我不明白,但现在更好了:p
  • 老实说,我做错了操作,我认为 0x04000000 | 0x20000000= 0x60000000 所以没注意4x的位置)
【解决方案2】:

一个 | b 是 a 和 b 的按位或。

它是按位或的赋值

a1 |= a2;

是:

a1 = a1 | a2;

|= 与 += 的读取方式相同。

【讨论】:

    【解决方案3】:

    notification.flags = (notification.flags | Notification.FLAG_AUTO_CANCEL);一样

    参见。 a += b 等价于a = (a + b);

    为了清楚起见,我使用了多余的括号。

    【讨论】:

    • "a +=b 等价于 a = (a + b);"?试试byte a = 100, b = 100;
    • @johnchen902;对不起,我没有关注。
    • a += b 等价于a = (type of a)(a + b)。所以如果ab 都是byte(或类似的东西),a = (a + b); 会引发编译错误,而a += b 不会。
    【解决方案4】:

    据我所知,这些都是位运算符。

    正如 Bathsheba 所写,它等于 (notification.flags | Notification.FLAG_AUTO_CANCEL);

    这是一个合乎逻辑的或,有关信息,请参见此处:Oracle.com

    关于Wikipedia的信息。

    【讨论】:

      【解决方案5】:

      例如,假设 FLAG_ACTIVITY_CLEAR_TOP 为 2,FLAG_ACTIVITY_SINGLE_TOP 为 4。 因此,在二进制中,十进制值 2 的表示将是 0000000010,值 4 的表示将是 00000100。这两个值之间的二进制或运算将给出值 6:00000110(2 和 4 上的 on 位都打开)。使用两个值的幂作为吸常数将确保只有唯一值会在 th 位或之后出现:

      例如:1 是 00000001 2 是 00000010 4 是 00000100 8 是 00001000 16 是 00010000 .....

      如果您以这种方式设置标志 - 解码原始标志非常容易:只需对原始标志执行按位与运算,如果它为零则标志不存在 - 如果它是标志本身 - 然后标志起来了。

      例如:让我们检查标志 SOME_FLAG 的 000011000 - 并且假设该示例的值是 8 - 00001000。在按位和运算之后:00011000 和 00001000 - 我们将得到 00001000 ,与其他东西进行与运算(不包括 SOME_FLAG 标志 - 与任何其他具有 2 值的标志一样)将返回 0。

      【讨论】:

      • 抱歉,已编辑(在编辑之前,我回答了 || 和 | 之间的区别 - 这不是问题)
      • 非常感谢您的帮助
      【解决方案6】:

      如果您查看这些标志,您会发现它们都是 2 的幂。这意味着恰好有一位设置为 1,因此按位执行或在这种情况下仅意味着设置所有这些标志。

      【讨论】:

        猜你喜欢
        • 2016-03-07
        • 2021-12-18
        • 2010-12-30
        • 1970-01-01
        • 2013-07-30
        • 2021-04-02
        • 2012-01-19
        • 1970-01-01
        相关资源
        最近更新 更多