【问题标题】:How to read result of bitwise operator OR (|)?如何读取按位运算符 OR (|) 的结果?
【发布时间】:2011-06-23 16:58:35
【问题描述】:

我想确认 Android XML 文件中的位运算符。例如这一行

android:layout_gravity="center_horizontal|bottom"

我应该如何阅读它?继承自 Java 或 Android 的规则是否对位运算符有自己的解释?

是否支持所有位运算符?如果是的话,你能告诉我其他运营商的例子吗(链接也可以)?

谢谢

【问题讨论】:

    标签: android bitwise-operators bitwise-or


    【解决方案1】:
    2|1 = 3
    2&1 = 0
    3&1 = 1
    

    central_horizo​​ntal,bottom 是整数,所以你可以使用这个结构

        int center_horizontal = 0x05; //just for clarification
        int other_orientation = 0x10;
        int orietntation = center_horizontal | other_orientation;
    
    //this condition returns true
        if((orientation&center_horizontal)==center_horizontal){
            //something to do
            }
    

    【讨论】:

    • 嗯,这是非常有趣的说法。你什么时候会使用这样的代码?为什么?
    • 您可以使用它来创建自己的标志。你已经问过了,所以我会发布答案。可以使用任何运算符 - &、|、^,它会起作用。
    【解决方案2】:

    android_layout_gravity 的值由 Android 代码解析。正如here 所记录的,这里唯一可识别的运算符是|。我不相信将| 解释为按位或运算符是规范的一部分。 (例如,center_horizontal 是 0x05,right 是 0x01;它们的按位 OR 就是 0x05。)

    【讨论】:

    • 中心水平和右边显然不应该一起使用。但是,您可以使用任何您想要的按位运算符,但是它没有目标,它仍然是 100% 正确的语法。如果你使用 center_horizo​​ntal 和 top 0x05|0x30 你会得到 0x35 并且它作为任何其他位标志工作。
    • 根据你发给我的链接,这个|只是多个属性的分隔符。对?它是否曾经被视为按位或?我的意思是,这两个值都是强制性的,因此元素将位于这两个位置。
    • @askmoo - 我相信属性值的解释确实是按位或实现的。但它可以很容易地实现为一组标志。正如@piotrpo 指出的那样,逻辑上不兼容的值不应一起使用;我相信如果你这样做,结果是不确定的。 (如果规范说这些值是使用按位 OR 组合的,那么结果将被定义,但我无法找到记录此行为的任何地方。)人们可以挖掘源代码以查看它是如何实现的,但如果它未定义,可能会在未来的版本中更改。
    • 你知道使用不兼容的属性会不会报错吗?
    猜你喜欢
    • 1970-01-01
    • 2020-12-17
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 2022-06-24
    • 1970-01-01
    • 2015-07-08
    • 1970-01-01
    相关资源
    最近更新 更多