诌议布尔运算∧∨⊕
mathcad吧
全部回复
仅看楼主
level 15
月城翁 楼主
诌议布尔运算∧∨⊕
用乘和加分别代替布尔运算的∧和∨可以与其它非布尔运算无缝融合,并且使算式简洁,比if好用。问题是用什么非布尔运算来代替布尔⊕呢?
且看下面的比较:
a b a∧b a·b a∨b a+b a⊕b
0 0 0 0 0 0 0
0 1 0 0 1 1 1
1 0 0 0 1 1 1
1 1 1 1 1 2 0
从上表可以看出,用乘法代替∧是完全等价的,没有问题。问题出在加法上。最后一行a+b=2,是true,还是false?
这就要看当时的使用环境来决定了。
对于
if a+b then ... otherwise ...
是把a+b当作true在用,所以这里的a+b=2等价于a+b=1,所以加运算和或运算就等价了。
但是,对于
(-1)^(a+b)
因为(-1)^0=1和(-1)^2=1是等价的,所以,这时a+b就等价于a⊕b了。
因为这个原因,在用加法代替布尔运算的"?或"时可要特别留意,以免出错。
我在https://tieba.baidu.com/p/3463042030的29楼中的程序板的倒数第3行用到:
(-1)^(mod(v,4)>1)+mod(u,2)
就应该是:
(-1)^(mod(v,4)>1)⊕mod(u,2)
但是从幂指数的运算的角度来说,用+来得更自然,在必要时更容易分割成两个指数算式。
2014年12月16日 03点12分 1
level 15
月城翁 楼主
a___b___a∧b___a·b___a∨b___a+b__a⊕b
0___0_____0_____0_____0_____0_____0
0___1_____0_____0_____1_____1_____1
1___0_____0_____0_____1_____1_____1
1___1_____1_____1_____1_____2_____0
2014年12月16日 04点12分 2
level 12
“异或”不是等于not and 么?
2014年12月16日 07点12分 3
level 12
not也是bool运算符
2014年12月16日 07点12分 4
level 15
月城翁 楼主
¬(a∧b)=¬a∨¬b
a⊕b= (¬a ∧ b) ∨ (a ∧¬b)
二者并不相等。从上面的布尔表中也能看到二者不相等。
引入¬运算,配合+和• 使用,不是很方便。¬a和(1-a)等价(a=0或1)。
2014年12月16日 08点12分 5
level 15
月城翁 楼主
a__b__(a∧b)__¬(a∧b)__¬a∨¬b__a⊕b
0__0____0________1______1______0
0__1____0________1______1______1
1__0____0________1______1______1
1__1____1________0______0______0
2014年12月16日 08点12分 8
level 12
and,可以用(a+b)/(a^2+b^2),同时把“工作表选项”中“计算”中的“0/0=0”打开。
not,没办法,违反了希尔伯特体系的基本概念,仅用四则运算做不到。
2014年12月16日 08点12分 9
level 12
月城,你说的1-a我确实没想到,我的那个and表达式也很牵强。异或的概念我也搞错了。真是很失败哈,这两天考试弄得我晕头了。
异或:|a-b|,这回应该没问题了。
2014年12月16日 13点12分 10
又是一种方法。谢谢。
2014年12月16日 13点12分
level 12
为了弥补我上面的特别扯淡,提供几个计算方法,供@月城公寓寓公 参考:
2014年12月16日 15点12分 11
level 12
嗯,还能继续列举,很扯哈。
2014年12月16日 15点12分 12
谢谢!开眼界了。不过太多了就记不住了。
2014年12月16日 15点12分
level 12
2014年12月16日 15点12分 13
level 13
[哈哈][哈哈]
2014年12月17日 09点12分 14
1