【问题标题】:Detailed explanation for Bit wise or Operator works in different methodBit wise 或 Operator 以不同方式工作的详细说明
【发布时间】:2013-06-14 08:38:24
【问题描述】:

这里是代码。

public class Test {

    public static void main(String[] args) {
        int x=2; int y = 3;
        if((y == x++) | (x < ++y)){
            System.out.println("x = " + x + "Y = " + y);
        }
    }
}

这会输出x=3 y=4

另一个标准

public class Test {

    public static void main(String[] args) {
        System.out.println(4|3);
    }
}

这会输出7

这里的第二个条件| 用作按位运算符。但在第一个标准| 中不是。它操纵并给出输出。我需要解释第一个标准是如何工作的。

我知道的是,| 将比较两边,|| 将只比较左侧,它确实会继续下一步。

希望我的问题很清楚。提前谢谢你..

【问题讨论】:

标签: java operators bitwise-operators


【解决方案1】:

对于第一个示例,您将拥有:

if ((3 == 2) | (3 < 4))

等于:

if ( false | true )

计算结果为true(因为比较了表达式的两边)。

对于第二个示例,由于您已经知道 | 将比较双方,这就是实际发生的情况。将数字转换为二进制,然后进行运算:

4 | 3

将转换为:

100 | 011 = 111

等于7

【讨论】:

    【解决方案2】:

    关注JLS 15.22.2

    &amp;^| 运算符的两个操作数均为booleanBoolean 类型时,则按位运算符表达式的类型为boolean。在所有情况下,操作数都会根据需要进行拆箱转换 (§5.1.8)。

    对于&amp;,如果两个操作数的值都是true,则结果值为true;否则,结果为false

    对于^,如果操作数值不同,则结果值为true;否则,结果为false

    对于|,如果两个操作数的值为false,则结果值为false;否则,结果为true

    以第一种情况为例:

    int x=2; int y = 3;
    if((y == x++) | (x < ++y)){
           System.out.println("x = " + x + "Y = " + y);
    }
    

    (y == x++) 是假的,因为 x++ 是后增量,(x &lt; ++y) 是真,因此 false|truetrue,你会得到带有 x=3y=4 值的控制台 o/p .


    第二种情况,自然按位或:

    System.out.println(4|3);
    

    3 位 中是 (011|100) = (111) = 7(base 10)。

    【讨论】:

    • 非常好的解释哥们。谢谢你。现在我可以理解它是如何工作的了。它在操作数和操作时如何采用布尔值。
    【解决方案3】:

    在第一个示例中,首先计算表达式的左侧:

    y == x++ // y == x; x=x + 1
    

    y 为 3,x 为 2,相等检查为 falsex 递增为 3。

    然后计算表达式的右侧:

    x < ++y; // y = y + 1; x < y
    

    y 递增为 4,然后检查 x 是否小于 y。是的,3小于4,右边部分的结果是true

    由于左侧的false 和右侧的true 之间存在按位| 运算符,因此结果为

    false | true = true
    

    这就是为什么表达式是 truesyso 被执行的原因。


    在第二个例子中,执行按位或,因此

    100 | 011 = 111 //is equal to 7
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-06
      • 1970-01-01
      • 2022-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-24
      相关资源
      最近更新 更多