0

我正在查看过去的论文进行修改,有一个问题没有得到解释,我似乎在网上找不到很多关于这个问题/主题的信息。

二进制值
a = 00110011
b = 10101010

我个人不太确定 & 和 && 之间的区别是什么,与 | 相同 和 || - 这些都有点令人困惑。

以下哪个语句返回 TRUE 条件?
(a & b) == 10111011
(a || b) == 10111011
(a ^ b) == 10111011
(a | b) == 10111011
(a && b) == 10111011

任何帮助将不胜感激!

4

3 回答 3

2

&& 和 || 是短路运算符。它们将以与 & 和 | 相同的方式返回 true/false 将。区别基本上是第二个表达式仅在必要时才被评估。还有一些用法差异(即 && 只能对标量进行操作)。

有关短路运算符的说明,请参见此链接:http: //www.mathworks.com/help/matlab/ref/logicaloperatorsshortcircuit.html

于 2013-05-17T01:45:38.887 回答
1

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

一个 = 00110011

b = 10101010

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

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

所以 (a & b) == 10111011 这意味着 00100010 == 10111011 是一个 False 语句并返回 False。

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

|| 也是如此 和 | .

于 2013-05-17T08:44:57.237 回答
0

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

考虑:7&3= true,7&8= true - 与 C 不同的行为

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

无论如何,作为 Matlab 声明,它总是将您的数字视为十进制。含义a^b将被计算为“a 的 b 次方”。


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

在 Matlab 中 & 和 | 向量化的意思是它们按元素比较向量。&& 和 || 只比较 skalars 和短路。^ 是幂运算符 - 所以你需要把它写成 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]))

这也意味着带有 && 和 || 的语句 在这种情况下无效。

于 2013-05-17T10:50:31.527 回答