【问题标题】:result of logical operation逻辑运算的结果
【发布时间】:2015-03-01 09:28:46
【问题描述】:

对于逻辑运算符,操作数必须是 boolean

类型

假设如下代码:-

int p,q;

p=1;

q=1;

System.out.println("The result is : "+(p&q));

输出

结果是:1

我的问题是,在上面的代码中,两个变量都不是 Boolean 类型。那为什么这段代码没有产生错误呢?

还有

System.out.println(" This is an error : "+(!p));

为什么这个语句会产生错误?

【问题讨论】:

    标签: java error-handling logical-operators


    【解决方案1】:

    虽然它使用的符号看起来很相似,但这不是布尔运算,
    它是按位运算并返回int,而不是boolean。另见:

    http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html

    请注意,您使用了&(按位与)而不是&&(逻辑与)。

    【讨论】:

    • 请注意 && 不能应用于 int 操作数。
    • @OliverCharlesworth 是的,如果尝试使用 int 操作数,&& 将产生编译错误。
    • && 不是逻辑与,而是条件与。 & 既是逻辑与又是按位与,具体取决于操作数类型。
    • 如果我将以上两个变量声明为布尔值会怎样。
    • @MarkoTopolnik 好的,这个微妙的术语注释已被记录。
    【解决方案2】:

    p&q 是两个整数的按位与,而不是逻辑运算符。

    !p 无效,因为整数上没有 ! 一元运算符。 ! 仅为布尔值定义。

    【讨论】:

      【解决方案3】:

      & 是按位与运算符。

      如果两个操作数中都存在二进制 AND 运算符,则将其复制到结果中

      例如你的情况。

      p = 1 (int) = 0001 (二进制) q = 1 (int) = 0001 (二进制)

         0001
      
       & 0001
      ---------
         0001
      

      导致 0001 = 1 int.

      另一方面,&& 是逻辑运算符,需要布尔操作数。

      称为逻辑与运算符。如果两个操作数都不为零,则条件为真。

      进一步的! 也是逻辑运算符和必需的布尔操作数。

      称为逻辑非运算符。用于反转其操作数的逻辑状态。如果条件为真,则逻辑非运算符将为假。

      供参考,visit this site.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-23
        • 1970-01-01
        • 2013-08-30
        • 2014-03-21
        • 2012-08-22
        • 2013-09-06
        相关资源
        最近更新 更多