我正在阅读过去的论文进行修改,并且有一个问题没有得到解释,我似乎无法在网上找到这个问题/主题。
二进制值
a = 00110011
b = 10101010
我个人并不十分确定&和和&&是,和|相同和|| - 这些都有点令人困惑。
以下哪项陈述返回TRUE条件?
(a& b)== 10111011
(a || b)== 10111011
(a ^ b)== 10111011
(a | b)== 10111011
(a&& b)== 10111011
非常感谢任何帮助!
答案 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 ;;和||在这种情况下无效。