分享

逻辑运算符 | Matlab 基础

 小温爱怡宝 2023-07-22 发布于江西

逻辑运算符

  • 运算符的优先级

  • 逻辑运算符和向量

  • 用逻辑向量进行下标

MATLAB的异或函数xor(a, b)用于计算两个二进制数的异或结果。它接受两个参数a和b,返回一个与a和b同维度的数组,其中每个元素都是a和b对应位置上的二进制数异或的结果。

例如,当a=[1 0 1 0],b=[0 1 0 1]时,执行xor(a, b)的结果为[1 1 1 1],表示a和b对应位置上的二进制数异或的结果。

下面是一个更具体的例子:

a = [1 0 1 0];
b = [0 1 0 1];
result = xor(a, b);
disp(result);

输出结果为:[1 1 1 1]。

异或函数xor(a, b)是一种逻辑运算符,用于比较两个二进制数的每一位。如果两个二进制数的某一位不同,则该位的结果为1,否则为0。例如,在MATLAB中,xor(a, b)可以用于比较两个逻辑向量的每个元素。如果a和b是逻辑向量,则xor(a, b)返回一个逻辑向量,其中每个元素都是a和b对应元素的异或结果。


优先级可以用括号覆盖,例如

>> ~ 0 & 0

ans =

  logical

   0

>> ~ (0 & 0)

ans =

  logical

   1

使用括号使逻辑更清晰永远不会错,即使它们在语法上是不必要的。


运算符的优先级

2 > 1 & 0
ans =

  logical

   0
  1. 先比较 2 是否大于 1,因为 2 大于 1,所以 2>1 为真,即返回逻辑值 true。
  2. 再将逻辑值 true 和数字 0 进行逻辑与运算,逻辑与运算的规则是当且仅当两个操作数都为真时,结果才为真,否则结果为假。因为 true & false 的结果为 false,所以最终的表达式结果为 false。

再如

0 < r < 1
ans =

  logical

   0

表达式0<r<1被求值为0。这是因为左边操作(0 < 0.5)首先被求值为1 (true),然后是1<1 (false)。

这样的不平等应该被编码为

(0 < r) & (r < 1)

括号不是严格必要的,但它们确实有助于澄清逻辑。

逻辑运算符和向量

逻辑运算符还可以对(相同大小的)向量进行操作,返回逻辑向量,例如:

~(~[1 2 0 -4 0])

ans =

  1×5 logical 数组

   1   1   0   1   0

在MATLAB中,~是逻辑非运算符,用于将逻辑向量中的每个元素取反。在这个例子中,[1 2 0 -4 0]是一个数值向量,MATLAB将其转换为逻辑向量,其中0表示false,非0表示true。然后,~[1 2 0 -4 0]将每个元素取反,即0变为1,非0变为0。因此,结果为[false, false, true, false, true],即[0 0 1 0 1]。最后,MATLAB将结果转换为逻辑向量,其中1表示true,0表示false。因此,~[1 2 0 -4 0]的结果为[true, true, false, true, false],即[1 1 0 1 0]。

用逻辑向量进行下标

vector的元素可以用下标引用,而下标本身也可以是vector,例如:

a = [-2 0 1 5 9];
a([5 1 3])

ans =

     9    -2     1

先定义了一个包含 5 个元素的数组 a,然后通过 a([5 1 3]) 的方式,提取了 a 中的第 5、1、3 个元素,即分别是 9、-2、1。这些元素被组成了一个新的数组,作为这段代码的输出,即 ans = [9 -2 1]。

>> a(logical([0 1 0 1 0]))

ans =

     0     5

在MATLAB中,a(logical([0 1 0 1 0]))是一个索引操作,用于从向量a中选择逻辑向量[0 1 0 1 0]中为true的元素。在这个例子中,向量a是[-2 0 1 3 -1],逻辑向量[0 1 0 1 0]表示选择第二和第四个元素。因此,结果为[0 5]

>> a(logical([0 0 0 0 0]))

ans =

  空的 1×0 double 行向量

在MATLAB中,a(logical([0 0 0 0 0]))是一个索引操作,用于从向量a中选择逻辑向量[0 0 0 0 0]中为true的元素。由于逻辑向量中没有true的元素,因此结果为空的1×0 double行向量。


逻辑向量下标提供了一种从向量中删除某些元素的优雅方式,例如:

a = a(a > 0)

a =

     1     5     9

从a中删除所有非正元素,因为a>0返回逻辑向量[0 0 1 1 1]。所以返回a = [-2 0 1 5 9]的后三位。

表达式a>0是一个逻辑向量,因为语句:

>> islogical(a > 0)

ans =

  logical

   1

islogical() 函数的作用是判断输入的参数是否为逻辑向量,因此在这个例子中,islogical(a > 0) 的返回值为逻辑值 true,说明 a>0 的返回值确实是一个逻辑向量。

数字向量[0 0 1 1 1]不是逻辑向量,因为:

>> islogical([0 0 1 1 1])

ans =

  logical

   0

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多