MATLAB에서 &와 &&의 차이점은 무엇입니까?


답변:


93

단일 앰퍼샌드 &는 논리 AND 연산자입니다. 이중 앰퍼샌드 &&는 다시 단락 동작을 사용하는 논리 AND 연산자입니다. 단락은 결과가 첫 번째 피연산자 (왼쪽)에 의해 완전히 결정되지 않은 경우에만 두 번째 피연산자 (오른쪽)가 평가됨을 의미합니다.

A 및 B (A 및 B가 평가됨)

A && B (B는 A가 참인 경우에만 평가됨)


75
주의 사항 : &배열에서 작동 할 수 있지만 &&스칼라에서만 작동 할 수 있습니다.
gnovice

참고 : 거의 매일 Matlab과 15 년 동안 일한 후 저는 항상 '&'를 사용하며 결코 저를 물린 적이 없습니다. OTOH, 나는 그것이 보편적이지 않다는 것을 기억해야하기 때문에 '&&'를 사용하여 짜증나는 많은 사람들을 알고 있습니다. 내 피연산자를 연결하여 오늘날 절감액은 무시할 수 있습니다.)
eric

7
@neuronet은 실제로 효율성에 관한 것이 아니라 첫 번째 표현식이 두 번째 표현식이 런타임 오류를 유발할 수있는 조건을 보장하는 구조를 허용하는 것입니다. 예 : d != 0 && 1/dvs- d !=0 & 1/d첫 번째는 0으로 나누지 않음을 보장하고 두 번째는 그렇지 않습니다.
Fraser

2
이 답변은 불완전하고 부정확합니다. 문 &에서 if 단락을 수행 if합니다. 그리고 &&스칼라 입력을받습니다. 아래 @Loren의 대답 이 맞습니다.
Cris Luengo

2
또한 Loren은 MathWorks 직원입니다. 대답이 그것보다 더 권위있는 것은 아닙니다. 희생을하고자한다면 모드가 그것을 삭제할 수 있도록 답변에 플래그를 지정할 수 있습니다 (수락되었으므로 직접 삭제할 수 없습니다). (내가 시스템을 올바르게 이해한다면) 당신이 얻은 담당자를 유지하고 우리는 기술적으로 정확하고 권위있는 최고 답변으로 끝날 것입니다.
Andras Deak

35

&&그리고 ||항상 스칼라 입력과 단락을. |그리고 &if / while 문에서만 배열 입력과 단락을 가져옵니다. 할당을 위해 후자는 단락되지 않습니다.

자세한 내용은 이 문서 페이지 를 참조하십시오.


1
Matlab 버전 바로 가기 &|if / while 문에 대한 정보가 있습니까? R2012b 및 R2014a에서는 그렇지 않은 것 같습니다.

@Loren이 스칼라로만 작동하도록 설계 했는지 아십니까 ? 그것은 ... 이상한 것
에릭

@neuronet : 어레이에서 작동하는 경우 단락 할 수 없습니다.
Cris Luengo

17

다른 이미 언급 된 바와 같이, &A는 논리적 AND 연산자&&A는 단락 AND 연산자 . 피연산자가 배열 또는 스칼라에서 작동하는지 여부는 물론 피연산자가 평가 되는 방식이 다릅니다 .

  • &(AND 연산자) 및 |(OR 연산자) 는 요소별로 배열 에서 작동 할 수 있습니다 .
  • &&그리고 ||그 결과가 완전히 제 피연산자에 의해 결정되지 않은 경우에만 상기 제 피연산자가 평가되는 단락 버전이다. 이들은 배열이 아닌 스칼라 에서만 작동 할 수 있습니다 .

8

둘 다 논리적 AND 연산입니다. 그러나 &&는 "단락"연산자입니다. MATLAB 문서에서 :

결과가 첫 번째 피연산자에 의해 완전히 결정되지 않은 경우에만 두 번째 피연산자를 평가한다는 점에서 단락 연산자입니다.

여기에서 더 많은 것을 보십시오 .


6

다른 언어와 &마찬가지로은 논리 비트 연산자이고은 &&논리 연산입니다.

예를 들어 (내 구문을 용서하십시오).

만약..

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

..또는..

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

의 경우 &&오른쪽 피연산자는 왼쪽 피연산자가 true이고 결과가 단일 부울 값인 경우에만 계산됩니다.

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

분명하길 바랍니다.


3
비트가 아니라 요소에 따라 다릅니다.
Cris Luengo

3
10 년이 지난 지금 막 잘 되었나요? 😺
에릭 리케 케르

글쎄,이 질문은 지금까지 ~ 115k 뷰를 얻었습니다. 이것은 많은 사람들이 여기에서 잘못된 정보를 읽었 음을 의미합니다. 이러한 답변 중 대부분은 불완전하거나 잘못된 정보를 포함하고 있습니다. 답변을 수정하거나 삭제하기 만하면됩니다. BTW : bitandMATLAB의 비트 논리 AND 연산자입니다.
Cris Luengo

4

&& 및 || 있는 단락 스칼라에서 작동 연산자. & 및 | 배열에서 작동하고 또는 루프 표현식 의 컨텍스트에서만 단락을 사용 하십시오 .ifwhile


2

조건문 (IF, WHILE 등)에서 사용할 인수를 구성 할 때 좋은 경험 법칙은 항상 && / || 하지 않는 아주 좋은 이유가 없다면 양식. 두 가지 이유가 있습니다 ...

  1. 다른 사람들이 언급했듯이 && / ||의 단락 동작 대부분의 C와 유사한 언어와 유사합니다. 그 유사성 / 친숙성은 일반적으로 유리한 점으로 간주됩니다.
  2. && 또는 || 사용 양식 벡터 인수에 대한 의도를 결정하기 위해 전체 코드를 작성하도록합니다. a = [1 0 0 1] 및 b = [0 1 0 1] 인 경우 a & b는 참 또는 거짓입니까? MATLAB의 규칙이 기억 나지 않습니다. 대부분의 사람들은 할 수 없습니다. 반면에 && 또는 ||를 사용하면 조건을 해결하기 위해 코드를 "완전히"작성해야합니다.

이렇게하면 & 및 |의 벡터에 대한 MATLAB의 해상도에 의존하는 대신 약간 더 장황하지만 훨씬 더 안전하고 유지 관리하기 쉬운 코드가 생성됩니다.


1
+1, 그러나 귀하의 답변 은 연산의 최종 결과가 스칼라가 되기를 원하는 경우에만 적용된다는 점에 유의해야합니다 . & 및 |에 대한 많은 용도가 있습니다. 어디 &&와 || 예를 들어 "1과 2 사이의 모든 r 선택"과 같은 멋진 인덱싱을 수행 할 때 배열을 반환 할 수 없기 때문에 쓸모가 없습니다 r((r<2)&(r<2)).
Jonas Heidelberg

좋은 지적이야, 조나스. 이 글을 쓸 때 "논리적 인덱싱"(당신이 언급 한 "팬시 인덱싱"을 뜻하는 MATLAB 용어)이 아니라 조건문을 생각하고있었습니다. 나는 그것을 반영하기 위해 내 게시물의 첫 문장을 변경했습니다. 알림 감사합니다!
밥 길모어
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.