MATLAB逻辑运算符

逻辑运算符是联系一个或两个逻辑操作数并能产生一个逻辑结果的运算符。

MATLAB 支持 4 中逻辑运算,分别是与、或、非、异或,其中:
  • 与、或和非运算既可以使用逻辑运算符,也可以使用逻辑运算函数;
  • 异或运算只能使用逻辑运算函数。

MATLAB 支持的逻辑运算符和逻辑运算函数一览表
逻辑运算符 描述
& 逻辑与运算符,& 两边的表达式的结果都为 1 时返回 1,否则返回 0。
| 逻辑或运算符,| 两边的表达式结果有一个为 1 时返回 1,都为 0 时才返回 0。
~ 逻辑非运算符,~ 会对表达式的结果进行取反操作。表达式为 1 时得到 0,为 0 时得到 1。
逻辑运算函数 描述
and(A, B) 逻辑与运算函数,A 和 B 都为 1 时返回 1,否则返回 0。
or(A, B) 逻辑或运算函数,A 和 B 有一个为 1 时返回 1,都为 0 时才返回 0。
not(A) 逻辑非运算,A 为 1 时返回 0,A 为 0 时返回 1。
xor(A, B) 异或运算函数,A 和 B 不同是返回 1,相同时返回 0。
向量运算函数 描述
any(A) 向量 A 中有非 0 元素时返回 1,矩阵 A 某一列有非 0 元素时返回 1。
all(A) 向量 A 中所有元素都为非 0 时返回 1,矩阵 A 中某列所有元素都为非 0 时返回 1。

二元逻辑运算的基本形式如下:

a1 op a2

一元逻辑运算的基本形式为:

op a1

a1 和 a2 代表表达式或变量,op 代表逻辑运算符。如果 a1 和 a2 的逻辑运算关系为 true,那么运算将会返回值 1,否则将会返回值 0。

下表演示了各种逻辑运算的结果:
输入 与运算 或运算 异或运算 非运算
11 12 11& 12 11 | 12 xor(11, 12) ~11
0 0 0 0 0 1
0 1 0 1 1 1
1 0 0 1 1 0
1 1 1 1 0 0

如果一个数的值不为 0,那么 MATLAB 将把它看作 true。如果它为 0,则将其看作 false。所以 ~5 的结果为 0;而 ~0 的结果为 1。

逻辑运算的优先级

在运算顺序中,逻辑运算是在所有的数学运算和关系运算之后才进行。表达式中的运算顺序如下:
  1. 所有的数学运算按照前面描述的顺序进行。
  2. 从左向右依次进行关系运算。
  3. 执行所有运算。
  4. 从左向右依次进行&运算。
  5. 从左向右依次进行|运算,和数学运算一样,括号能改变括号中的默认顺序。

下面是关于逻辑运算的一些例子,假设下面有三个变量有初始值,一些表达式及其运算结果如下。

>> value1 = 1
value1 = 1

>> value2 = 0
value2 = 0

>> value3 = -10
value3 = -10

>> ~value1
ans = 0

>> value1 | value2
ans = 1

>> value1 & value2
ans = 0

>> value1 & value2 | value3
ans = 1

>> value1 & (value2 | value3)
ans = 1

>> ~(value1 & value3)
ans = 0

因为运算在其他逻辑运算之前进行,那么最后一行中的括号是必需的。如果去掉括号,最后一行的表达式将等价于(~value1) & value3

逻辑运算符和矩阵运算

与关系运算符一样,逻辑运算符也可以进行矩阵与数值之间的比较,比较的方式是将矩阵的每个元素都与数值进行比较,比较结果为一个相同维数的矩阵,新生成矩阵的每一个元素都代表着原来矩阵中相同位置上的元素与该数值的逻辑运算的结果。

使用逻辑运算符比较两个相同维数的矩阵时,是按元素来进行比较的,其比较结果是一个包含 1 和 0 的矩阵。元素 0 表示逻辑为假,元素 1 表示逻辑为真。

A&B 返回一个与 A 和 B 相同维数的矩阵。在这个矩阵中,A 和 B 对应元素都为非 0 时,则对应项为 1,有一个为 0 时则对应项为 0。

A|B 返回一个与 A 和 B 相同维数的矩阵。在这个矩阵中,A 和 B 对应元素只要有一个为非 0,则对应项为 1;两个矩阵均为 0 时,则对应项为 0。

~A 返回一个与 A 相同维数的矩阵。在这个矩阵中,A 对应项是 0 时,则对应项为 1;A 中对应项是非 0 时,则对应项为 0。