我运行此代码:
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而不使用条件||和&&?
答案 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);
}