【问题标题】:Notation for logic in JavaJava中的逻辑符号
【发布时间】:2012-03-01 11:02:59
【问题描述】:

绝对基本的 Java 问题,我很难在 Google 上找到。以下是什么意思:

(7 & 8) == 0?

是否相当于写作:

7 == 0 || 8 == 0?

我写了一个快速的 main 来测试这个,它似乎是这样的。我只是想确保我没有遗漏任何东西。

【问题讨论】:

    标签: java operators bitwise-operators notation


    【解决方案1】:

    不。 &bitwise and。如果在两个输入中都设置了相应的位,则它会设置一个位。因为在二进制中,7 是111,8 是1000,它们没有共同的位,所以结果是0

    对于您建议的内容,实际上没有任何简写语法,而不是一行。有一些变通方法——测试SetBitSet 中的成员资格,使用switch 语句——但没有什么比7 == 0 || 8 == 0 更高效、更简短。

    【讨论】:

      【解决方案2】:

      & 是按位与。给定输入的两位,以下给出按位与输出的位:

      0 & 0 = 0
      0 & 1 = 0
      1 & 0 = 0
      1 & 1 = 1
      

      在这种情况下,

      7 in binary is 00000111
      8 in binary is 00001000
                     --------
                     00000000, which is 0 in decimal.
      

      假设你有 26 个而不是 8 个。

       7 in binary is 00000111
      26 in binary is 00011010
                      --------
                      00000010, which is 2 in decimal.
      

      按位运算用于提取和操作包含在数字中的字段。

      例如,假设您将 3 个字段打包成一个数字,每个 4 位中的两个 (0..15),一个和 3 个位 (0..7)。

      // n = aaaabbbbccc
      
      // Unpack the fields:
      a = (n >> 7) & 0xF;
      b = (n >> 3) & 0xF;
      c = (n >> 0) & 0x7;
      
      // Pack the fields:
      n = (a << 7)
        | (b << 3)
        | (c << 0);
      

      【讨论】:

        【解决方案3】:

        &amp; 是按位与运算符。这意味着您正在对代表 8 和 7 的位进行与运算:

        7 -> 0111

        8 -> 1000

        这显然是 0。

        这个wikipedia article 用你的确切例子很好地解释了它,并解释了其他按位运算符。

        【讨论】:

          【解决方案4】:

          这是位比较,工作正常,因为您正在与 7 和 8 进行比较,不能保证与其他情况。如果整数中的两个位都匹配,您将得到“1”而不是“0”的结果。

          【讨论】:

            【解决方案5】:
            如上所述,

            & 有点比较,但也可以用作短路“和”。例如:

            if((x == 3) &&  (y = 3/0)){
            

            会一直抛出错误。然而,

            if((x == 3) & (y = 3/0)){
            

            只会在 x 等于 3 时抛出错误。如果 x 不等于 3,java 将不会费心评估其余的表达式,因为 False & 任何东西都会是 False。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2014-01-01
              • 2015-02-22
              • 1970-01-01
              • 1970-01-01
              • 2012-10-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多