逻辑运算符,这些如何评估?

时间:2013-05-17 01:01:57

标签: matlab logical-operators

我正在阅读过去的论文进行修改,并且有一个问题没有得到解释,我似乎无法在网上找到这个问题/主题。

二进制值
a = 00110011
b = 10101010

我个人并不十分确定&和和&&是,和|相同和|| - 这些都有点令人困惑。

以下哪项陈述返回TRUE条件?
(a& b)== 10111011
(a || b)== 10111011
(a ^ b)== 10111011
(a | b)== 10111011
(a&& b)== 10111011

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:2)

&&和||是短路运营商。它们将以与&相同的方式返回真/假。和|将。差别在于,第二个表达式只在必要时才会被评估。还有一些使用差异(即&&只能对标量进行操作)。

有关短路运营商的解释,请参阅此链接:http://www.mathworks.com/help/matlab/ref/logicaloperatorsshortcircuit.html

答案 1 :(得分:1)

&和|是按位运算符,这意味着它们以逐位方式运行。和&&和||运算符是返回真/假答案的逻辑运算符。例如:

a = 00110011

b = 10101010

如果你计算(a& b)它将返回00100010

==运算符比较两个语句以查看它们是否相等并返回True / False值。

所以(a& b)== 10111011这意味着00100010 == 10111011是一个错误的陈述并返回False。

如果你计算(a&& b)你有两个值都是True,因为除了00000000之外的每个值都是True所以(a&& b)返回一个True值而它不是一个数值要与另一个进行比较,所以写(a&& b)== 10111011没有任何意义。

对于||也是如此和|

答案 2 :(得分:0)

正如你要求专门针对matlab的那样。它会将所有非0值视为真。

考虑:7&3 = true,7&8 = true - 与C

的行为不同

如果你有一个和b作为二进制数,matlab会将它们都视为真。结果将是真还是假 - 绝对不是数字。所以代码的结果总是错误的。

无论如何,作为Matlab语句,它总是将你的数字视为十进制数。意义a^b将被计算为“a到b的幂”。


我认为你的实际上是按位考虑的。这在Matlab中不存在 - 相反,你需要逻辑的向量。

在Matlab&和|矢量化的意思是他们比较velaors元素。 &安培;&安培;和||比较skalars和shortcircuit。 ^是幂运算符 - 所以你需要把它写成xor。对于元素比较,您需要eq命令而不是==。 最后为了确保所有位都相同,有all命令。

你会这样写:

a = [0 0 1 1 0 0 1 1]
b = [1 0 1 0 1 0 1 0]

all(eq(a & b, [1 0 1 1 1 0 1 1]))
all(eq(xor(a,b), [1 0 1 1 1 0 1 1]))
all(eq(a | b, [1 0 1 1 1 0 1 1]))

这也意味着与&&amp ;;和||在这种情况下无效。