Main Content

Short-Circuit AND, &&

쇼트서킷을 사용한 논리 AND

설명

예제

expr1 && expr2논리 쇼트서킷 동작을 사용한 논리 AND 연산을 나타냅니다. 즉, expr1이 논리값 0(false)인 경우 expr2는 실행되지 않습니다. 각 표현식은 논리형 스칼라 결과를 갖습니다.

예제

모두 축소

두 번째 조건이 첫 번째 조건에 종속되는 논리문을 지정합니다. 다음 명령문에서 제수 b가 0인 경우에는 오른쪽의 관계 연산을 실행하는 것이 의미가 없습니다.

b = 1;
a = 20;
x = (b ~= 0) && (a/b > 18.5)
x = logical
   1

결과는 논리값 1(true)입니다. 그러나 (b ~= 0)false일 경우 MATLAB®에서는 전체 표현식이 false인 것으로 간주하고 표현식의 실행을 조기에 종료합니다.

b = 0으로 지정하고 동일한 표현식을 실행합니다.

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

결과는 논리값 0(false)입니다. 첫 번째 명령문이 논리값 0(false)으로 실행되므로 표현식은 쇼트서킷됩니다.

'File''Format'이라는 이름의 필드를 가진 구조체를 만듭니다.

S = struct('File',{'myGraph'},'Format',[])
S = struct with fields:
      File: 'myGraph'
    Format: []

쇼트서킷 표현식은 여러 조건이 true여야 하는 if 문에서 유용하게 사용됩니다. 첫 번째 표현식이 true일 경우에만 두 번째 표현식을 실행하는 방식으로 각 조건을 작성할 수 있습니다.

S'Format'이라는 이름의 빈 필드를 갖는 경우만 실행되는 if 문을 지정합니다.

if isfield(S,'Format') && isempty(S.Format)
  S.Format = '.png';
end 
S
S = struct with fields:
      File: 'myGraph'
    Format: '.png'

첫 번째 조건은 'Format'S 구조체의 필드 이름인지 테스트합니다. 그런 다음 두 번째 명령문이 Format 필드가 비어 있는지 여부를 테스트합니다. 두 번째 조건은 첫 번째 조건에 종속됩니다. 첫 번째 조건이 true가 아니라면 두 번째 조건도 true가 될 수 없습니다. S'Format'이라는 이름의 빈 필드가 있으므로 위의 명령문이 실행되고 S.Format'.png' 값이 할당됩니다.

입력 인수

모두 축소

논리식으로, 논리형 스칼라로 평가되는 유효한 MATLAB® 표현식으로 지정됩니다.

예: isvector(x) && isreal(x)

예: (x > 1) && (x < 10)

데이터형: logical

세부 정보

모두 축소

논리 쇼트서킷

논리 쇼트서킷을 사용하면 결과가 완전히 결정되고 나면 논리식의 평가를 조기에 종료할 수 있습니다. 논리 AND 및 OR의 속성으로 인해 모든 조건을 평가하기 전에 논리식의 결과가 완전히 결정될 수도 있습니다.

  • and 논리 연산자는 표현식의 어느 한 조건이라도 false인 경우 논리값 0(false)을 반환합니다.

  • or 논리 연산자는 표현식의 어느 한 조건이라도 true인 경우 논리값 1(true)을 반환합니다.

이러한 값이 나오면 조기에 논리식의 실행이 종료되며, 이 경우 표현식이 쇼트서킷되었다고 말합니다. 이 기법을 적절하게 사용하면 코드에서 복잡한 비교를 효율적으로 수행할 수 있습니다.

예를 들어, MATLAB은 A && B 표현식에서 조건 A가 false이면 조건 B를 실행하지 않습니다. A가 false인 것이 결정되면 B의 값은 연산의 결과에 영향을 주지 않습니다.

  • if 또는 while 루프 표현식에 사용되는 경우에 한해, 요소별 &| 연산자는 쇼트서킷을 사용하여 표현식을 실행합니다.

    그러나 쇼트서킷 평가를 사용하려면 항상 && 연산자와 || 연산자를 사용해야 합니다. 표현식이 논리형 스칼라가 아닌 경우, 쇼트서킷 연산자 & 또는 |를 사용하면 예기치 않은 결과를 얻게 될 수 있습니다.

확장 기능

버전 내역

R2006a 이전에 개발됨