논리 연산자
논리 연산자
and, or, xor, not 같은 논리 연산자도 오버로드할 수 있어요. 단순 타입에서는 보통 boolean 연산이나 비트 단위 연산으로 쓰이지만, 오버로드하면 결과 타입을 자유롭게 정할 수 있습니다.
출처: 문서
본문
논리 연산자 and, or, xor, not는 오버로드할 수 있어요. 이 연산자들은 보통 단순 타입에 두 가지 방식으로 사용됩니다.
- boolean 연산자로 — 이 경우 결과는 boolean이에요. (
not는 예외) - 비트 단위(bitwise) 연산자로 — 이 경우 결과는 서수(ordinal) 타입이에요.
이 연산자들을 오버로드할 때 결과 타입은 제한되지 않습니다. 즉 boolean 논리 연산자로 정의할 수 있어요.
Type
Rec = record
a,b : Boolean;
end;
Operator and (r1,r2 : Rec) z : boolean;
begin
z:=(R1.a and R2.a) or (R1.b and r2.b);
end;
Operator or (r1,r2 : Rec) z : Boolean;
begin
z:=(R1.a or R2.a) and (R1.b or r2.b)
end;
Operator xor (r1,r2 : Rec) z : Boolean;
begin
z:=(R1.a xor R2.a) and (R1.b xor r2.b)
end;
Operator not (r1 : Rec) z : rec;
begin
z.A:=not R1.a;
z.B:=not R1.b;
end;
var
r1,r2 : Rec;
begin
Writeln(r1 and r2);
Writeln(r1 or r2);
Writeln(r1 xor r2);
Writeln((not r1).a);
end.
서로 다른 반환 타입을 갖는 것도 가능해요.
Operator and (r1,r2 : Rec) z : string;
begin
Str(Ord((R1.a and R2.a) or (R1.b and r2.b)),Z);
end;
컴파일러는 항상 반환 타입을 확인해서 표현식의 최종 타입을 결정하고, 할당은 타입 안전성 검사를 받게 됩니다.