1

これは私が欲しいものです:これは!A || (A && B && C) オリジナルと同等ですか?!A || A && B && Cなぜまたはなぜそうではないのですか?

4

6 に答える 6

8

はい、同じです。簡略化されて!A || B && Cいます。

演算子は&&演算子よりも優先順位が高い||ため、操作を囲む括弧&&は不要です。

于 2010-08-31T20:07:39.493 に答える
2

はい、そうです。

Java演算子の優先順位を見てください。

お気づきのように、論理積は論理積よりも優先されます。これは、 && 「より緊密に結合する」 ||ことを意味します。さらに、単項!も優先順位が高い||ため、最初のにのみ影響しAます。

于 2010-08-31T20:07:59.487 に答える
2

はい、2つの式は同じです。この特定の式で括弧が必要ない理由は、&&演算子が||よりも優先されるためです。オペレーター。

編集:これは、すべての可能な値の同等性をチェックする優れた単体テストです。

package main;

import junit.framework.Assert;

public class Test
{
    enum BOOL
    {
        TRUE(true), FALSE(false);

        private boolean m_val;

        BOOL(boolean val)
        {
            m_val = val;
        }

        public boolean getValue()
        {
            return m_val;
        }
    }

    @org.junit.Test
    public void test1()
    {
        boolean a,b,c;
        for (BOOL boola : BOOL.values())
        {
            for (BOOL boolb : BOOL.values())
            {
                for (BOOL boolc : BOOL.values())
                {
                    a = boola.getValue();
                    b = boolb.getValue();
                    c = boolc.getValue();
                    boolean exp1 = !a || (a && b && c);
                    boolean exp2 = !a || a && b && c;
                    Assert.assertEquals(exp1, exp2);
                }
            }
        }
    }
}

テストに合格したため、2つの式は実際に等しくなります。

于 2010-08-31T20:11:36.830 に答える
0

&&よりも優先され||ます。2つの式は同じです。A && B && C最初に評価されるため

これが、Javaの演算子PrecedenceGUIDです。

于 2010-08-31T20:07:12.533 に答える
0

確実に読みやすくするために、優先順位を明確にするために、演算の周りに括弧を配置することをお勧めします。

編集:これは私の意見だけではありません。これは、MISRA-c(ルール34)に準拠したリコモンドです。下部のelectronicDesingを参照してください。

そして&&の優位性が終わったので|| それらは同じです。

于 2010-08-31T20:07:40.757 に答える
0

ビット単位および(&&)の演算子の優先順位は、ビット単位または(||)よりも高くなります。http://download.oracle.com/javase/tutorial/java/nutsandbolts/operators.htmlを参照してください

これは、2番目の論理式のA && B && C部分が最初に評価され、次にF1が最初の式でF2が2番目の式である次の表に示すように、!Aと結合されるため、両方の論理式が等しいことを意味します。

A   B   C   F1  F2 
0   0   0   1   1
0   0   1   1   1
0   1   0   1   1
0   1   1   1   1
1   0   0   0   0
1   0   1   0   0
1   1   0   0   0
1   1   1   1   1

以下は、これをテストするためのJavaコードでもあります

public class TestLogic {
    public static void main(String[] args) {
        for (int i=0;i<8;i++) {
            boolean a=bit(i,3);
            boolean b=bit(i,2);
            boolean c=bit(i,1);
            System.out.println(asZeroOne(a)+asZeroOne(b)+asZeroOne(c)+"\t"+asZeroOne(f1(a,b,c))+"\t"+asZeroOne(f2(a,b,c)));
        }
    }

    static boolean f1(boolean a, boolean b, boolean c) {
        return !a || (a && b && c); 
    }

    static  boolean f2(boolean a, boolean b, boolean c) {
        return !a || a && b && c;
    }

    static  boolean bit(int value, int bitnumber) {
        int bitmask =  (int) Math.pow(2, bitnumber-1);
        return (value & bitmask)>0;
    }
    static String asZeroOne(boolean b) {
        return (b?"1":"0");
    }

}
于 2010-08-31T20:37:56.977 に答える