仅使用=和!=实现nand

时间:2014-04-26 10:03:43

标签: java boolean

我运行此代码:

public static void main(String[] args) throws Exception {
        boolean a = false;
        boolean b = true;
        xor(a,a);
        xor(a,b);
        xor(b,a);
        xor(b,b);
    }

    public static void xor(boolean a , boolean b){
        System.out.println(a + "\t" + b + "\t" + (a != b));
    }

得到了这个输出:

false   false   false
false   true    true
true    false   true
true    true    false

更新 如你所知,nand truth-table是:

false   false   true
false   true    true
true    false   true
true    true    false

如何使用=或!=运算符返回nand而不使用条件||和&&?

4 个答案:

答案 0 :(得分:4)

基本上因为false == false返回true。 False不等于false,因为false等于false。

如果您熟悉二进制操作:它就像二进制XOR操作

1 XOR 0 = 1
1 XOR 1 = 0
0 XOR 1 = 1
0 XOR 0 = 0 << this is false != false

编辑:对于NAND:

a ? !b : true;

a被评估,如果a为真,则不是结果,所以如果b为假,则结果为真,如果b为真,则结果为假。如果是假的,结果总是正确的。

答案 1 :(得分:4)

在没有&amp;&amp;的情况下实施 nand 和||?

尝试:

a ? !b : true;

如:

public static void nand(boolean a , boolean b){
    System.out.println(a + "\t" + b + "\t" + (a ? !b : true));
}

答案 2 :(得分:0)

嗯,这是一种方式......

return String.format("%b%b", a, b).length() != 8; // only "truetrue" has length 8

当然,内部String.format会做很多你在这个问题上禁止的事情......


这是另一种使用if而不是条件的方法,如果您的唯一条件是不使用其他运算符

if (a == false) return true; // (a==false && b==false) || (a==false && b==true)
if (b == false) return true; // (a==true && b==false)
return false;                // (a==true && b==true)

但是,NAND确实有两个独立的输入,你需要以某种方式测试和合并:a不是真的 b不是真的。没有办法绕过这两个条件,你只能用不同的技巧来模糊这个事实,或者以不同的方式使用库函数来推动你自己的代码。


第三种方式,在C中你可以这样做:return (int)a + (int)b != 2;或其他类似的布尔值解释为整数的操作,但是在Java中不允许将布尔值转换成整数,所以对于你必须使用的等效代码(对于示例)?:运算符将布尔值转换为整数。你当然可以将它包装在一个方法中,然后在java中你可以拥有return myBoolToInt(a) + myBoolToInt(b) != 2;,如果只是隐藏操作就可以了,你可以使用+ ...

答案 3 :(得分:0)

使用此功能是nand gate的实现

public boolean nand(boolean input1, boolean input2){
    return !(input1 && input2);
}