邏輯運(yùn)算符
運(yùn)算符的優(yōu)先級(jí)
邏輯運(yùn)算符和向量
用邏輯向量進(jìn)行下標(biāo)
MATLAB的異或函數(shù)xor(a, b)
用于計(jì)算兩個(gè)二進(jìn)制數(shù)的異或結(jié)果。它接受兩個(gè)參數(shù)a和b,,返回一個(gè)與a和b同維度的數(shù)組,,其中每個(gè)元素都是a和b對(duì)應(yīng)位置上的二進(jìn)制數(shù)異或的結(jié)果。
例如,,當(dāng)a=[1 0 1 0],,b=[0 1 0 1]時(shí),執(zhí)行xor(a, b)
的結(jié)果為[1 1 1 1],,表示a和b對(duì)應(yīng)位置上的二進(jìn)制數(shù)異或的結(jié)果,。
下面是一個(gè)更具體的例子:
a = [1 0 1 0];
b = [0 1 0 1];
result = xor(a, b);
disp(result);
輸出結(jié)果為:[1 1 1 1]。
異或函數(shù)xor(a, b)
是一種邏輯運(yùn)算符,,用于比較兩個(gè)二進(jìn)制數(shù)的每一位,。如果兩個(gè)二進(jìn)制數(shù)的某一位不同,則該位的結(jié)果為1,,否則為0,。例如,在MATLAB中,,xor(a, b)
可以用于比較兩個(gè)邏輯向量的每個(gè)元素,。如果a和b是邏輯向量,則xor(a, b)
返回一個(gè)邏輯向量,其中每個(gè)元素都是a和b對(duì)應(yīng)元素的異或結(jié)果,。
優(yōu)先級(jí)可以用括號(hào)覆蓋,例如
>> ~ 0 & 0
ans =
logical
0
>> ~ (0 & 0)
ans =
logical
1
使用括號(hào)使邏輯更清晰永遠(yuǎn)不會(huì)錯(cuò),,即使它們?cè)谡Z(yǔ)法上是不必要的。
運(yùn)算符的優(yōu)先級(jí)
2 > 1 & 0
ans =
logical
0
- 先比較 2 是否大于 1,,因?yàn)?2 大于 1,,所以 2>1 為真,即返回邏輯值 true,。
- 再將邏輯值 true 和數(shù)字 0 進(jìn)行邏輯與運(yùn)算,,邏輯與運(yùn)算的規(guī)則是當(dāng)且僅當(dāng)兩個(gè)操作數(shù)都為真時(shí),結(jié)果才為真,,否則結(jié)果為假,。因?yàn)?true & false 的結(jié)果為 false,所以最終的表達(dá)式結(jié)果為 false,。
再如
0 < r < 1
ans =
logical
0
表達(dá)式0<r<1
被求值為0,。這是因?yàn)樽筮叢僮?code style="font-size: 14px;word-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0 2px;background-color: rgba(27,31,35,.05);font-family: Operator Mono, Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(239, 112, 96);">(0 < 0.5)首先被求值為1 (true),然后是1<1
(false),。
這樣的不平等應(yīng)該被編碼為
(0 < r) & (r < 1)
括號(hào)不是嚴(yán)格必要的,,但它們確實(shí)有助于澄清邏輯。
邏輯運(yùn)算符和向量
邏輯運(yùn)算符還可以對(duì)(相同大小的)向量進(jìn)行操作,,返回邏輯向量,,例如:
~(~[1 2 0 -4 0])
ans =
1×5 logical 數(shù)組
1 1 0 1 0
在MATLAB中,~
是邏輯非運(yùn)算符,,用于將邏輯向量中的每個(gè)元素取反,。在這個(gè)例子中,[1 2 0 -4 0]
是一個(gè)數(shù)值向量,,MATLAB將其轉(zhuǎn)換為邏輯向量,,其中0表示false,非0表示true,。然后,,~[1 2 0 -4 0]
將每個(gè)元素取反,即0變?yōu)?,,非0變?yōu)?,。因此,結(jié)果為[false, false, true, false, true],,即[0 0 1 0 1],。最后,MATLAB將結(jié)果轉(zhuǎn)換為邏輯向量,,其中1表示true,,0表示false,。因此,~[1 2 0 -4 0]
的結(jié)果為[true, true, false, true, false],,即[1 1 0 1 0],。
用邏輯向量進(jìn)行下標(biāo)
vector的元素可以用下標(biāo)引用,而下標(biāo)本身也可以是vector,,例如:
a = [-2 0 1 5 9];
a([5 1 3])
ans =
9 -2 1
先定義了一個(gè)包含 5 個(gè)元素的數(shù)組 a,,然后通過 a([5 1 3])
的方式,提取了 a 中的第 5,、1,、3 個(gè)元素,即分別是 9,、-2,、1。這些元素被組成了一個(gè)新的數(shù)組,,作為這段代碼的輸出,,即 ans = [9 -2 1]。
>> a(logical([0 1 0 1 0]))
ans =
0 5
在MATLAB中,,a(logical([0 1 0 1 0]))
是一個(gè)索引操作,,用于從向量a中選擇邏輯向量[0 1 0 1 0]中為true的元素。在這個(gè)例子中,,向量a是[-2 0 1 3 -1]
,,邏輯向量[0 1 0 1 0]表示選擇第二和第四個(gè)元素。因此,,結(jié)果為[0 5]
,。
>> a(logical([0 0 0 0 0]))
ans =
空的 1×0 double 行向量
在MATLAB中,,a(logical([0 0 0 0 0]))
是一個(gè)索引操作,,用于從向量a中選擇邏輯向量[0 0 0 0 0]中為true的元素。由于邏輯向量中沒有true的元素,,因此結(jié)果為空的1×0 double行向量,。
邏輯向量下標(biāo)提供了一種從向量中刪除某些元素的優(yōu)雅方式,例如:
a = a(a > 0)
a =
1 5 9
從a中刪除所有非正元素,,因?yàn)閍>0返回邏輯向量[0 0 1 1 1],。所以返回a = [-2 0 1 5 9]
的后三位。
表達(dá)式a>0
是一個(gè)邏輯向量,,因?yàn)檎Z(yǔ)句:
>> islogical(a > 0)
ans =
logical
1
islogical()
函數(shù)的作用是判斷輸入的參數(shù)是否為邏輯向量,,因此在這個(gè)例子中,islogical(a > 0)
的返回值為邏輯值 true
,,說明 a>0
的返回值確實(shí)是一個(gè)邏輯向量,。
數(shù)字向量[0 0 1 1 1]
不是邏輯向量,因?yàn)椋?/p>
>> islogical([0 0 1 1 1])
ans =
logical
0