Bit wise或Operator的详细说明适用于不同的方法

时间:2013-06-18 08:08:41

标签: java operators bitwise-operators

这里的代码。

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

这里第二个标准|用作位智能运算符。但在第一个标准|不是。它操纵并提供输出。我需要解释第一个标准是如何工作的。

我知道的是,|将比较双方,而||只会比较左侧,而真正进行到下一步。

希望我的问题很明确。谢谢你提前..

3 个答案:

答案 0 :(得分:2)

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

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

等于:

if ( false | true )

并评估为true(因为比较了表达式的两边)。

对于第二个例子,既然你已经知道|会比较双方,这就是它真正发生的事情。数字转换为二进制数,然后应用操作:

4 | 3

将转换为:

100 | 011 = 111

等于7

答案 1 :(得分:1)

关注JLS 15.22.2

  

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

     

对于&,如果两个操作数值均为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++)为false,因为x++为后递增,(x < ++y)为真,因此false|truetrue,您将获得控制台o / p x=3y=4的值。


第二种情况,是自然按位OR:

System.out.println(4|3);

3-bit 中的(011|100) = (111) = 7(基数为10)。

答案 2 :(得分:1)

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

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被执行的原因。


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

100 | 011 = 111 //is equal to 7