Wat is het verschil tussen & en && in MATLAB?

Wat is het verschil tussen de logische operatoren &en &&in MATLAB?


Antwoord 1, autoriteit 100%

De enkele ampersand & is de logische AND-operator. De dubbele ampersand && is weer een logische AND-operator die kortsluitgedrag toepast. Kortsluiting betekent alleen dat de tweede operand (rechterkant) alleen wordt geëvalueerd als het resultaat niet volledig wordt bepaald door de eerste operand (linkerkant)

A & B (A en B worden geëvalueerd)

Een && B (B wordt alleen geëvalueerd als A waar is)


Antwoord 2, autoriteit 38%

&&en ||nemen altijd scalaire invoer en kortsluiting. |en &nemen array-ingangen en kortsluiten alleen in if/while-statements. Voor toewijzing maken deze laatste geen kortsluiting.

Zie deze documentpagina’svoor meer informatie.


Antwoord 3, autoriteit 18%

Zoals al door anderen vermeld, is &een logische AND-operatoren &&is een kortsluiting AND-operator. Ze verschillen in de manier waarop de operanden worden geëvalueerd en ook in het al dan niet werken op arrays of scalaires:

  • &(AND-operator) en |(OR-operator) kunnen elementsgewijs op arrayswerken.
  • &&en ||zijn kortsluitversies waarvoor de tweede operand alleen wordt geëvalueerd als het resultaat niet volledig wordt bepaald door de eerste operand. Deze kunnen alleen werken op scalars, niet op arrays.

Antwoord 4, autoriteit 8%

Beide zijn logische EN-bewerkingen. De &&; is echter een “kortsluiting” -operator. Uit de MATLAB-documenten:

Het zijn kortsluitoperatoren in die zin dat ze hun tweede operand alleen evalueren als het resultaat niet volledig wordt bepaald door de eerste operand.

Bekijk hier.


Antwoord 5, autoriteit 6%

&is een logische elementgewijze operator, terwijl &&een logische kortsluitoperator is (die alleen kan werken op scalaire waarden).

Bijvoorbeeld (excuseer mijn syntaxis).

Als..

A = [True True False True]
B = False
A & B = [False False False False]

..of..

B = True
A & B = [True True False True]

Voor &&wordt de rechter operand alleen berekend als de linker operand waar is, en het resultaat is een enkele booleaanse waarde.

x = (b ~= 0) && (a/b > 18.5)

Ik hoop dat het duidelijk is.


Antwoord 6, autoriteit 4%

&& en || zijn kortsluiting-operators die op scalairen werken. & en | werken op arrays, en gebruik kortsluitingalleen in de context van ifof whileloop-expressies.


Antwoord 7, autoriteit 2%

Een goede vuistregel bij het construeren van argumenten voor gebruik in voorwaardelijke uitspraken (IF, WHILE, etc.) is om altijdde &&/|| te gebruiken. formulieren, tenzij er een hele goede reden is om dat niet te doen. Er zijn twee redenen…

  1. Zoals anderen al hebben gezegd, is het kortsluitgedrag van &&/|| is vergelijkbaar met de meeste C-achtige talen. Die gelijkenis/bekendheid wordt over het algemeen als een voordeel beschouwd.
  2. De && of || formulieren dwingtu om de volledige code te schrijven om uw intentie voor vectorargumenten te bepalen. Als a = [1 0 0 1] en b = [0 1 0 1], is a&b waar of onwaar? Ik kan me de regels voor MATLAB’s & niet herinneren, jij wel? De meeste mensen kunnen dat niet. Aan de andere kant, als u && of ||, je bent GEDWONGEN om de code “volledig” te schrijven om de voorwaarde op te lossen.

Dit doen, in plaats van te vertrouwen op MATLAB’s resolutie van vectoren in & en |, leidt tot code die een beetje uitgebreider is, maar VEEL veiliger en gemakkelijker te onderhouden.

Other episodes