이번 글에서는 지난 글에서 다루지 못한 나머지 연산자를 알아보도록 하겠습니다.
관계 연산자
관계 연산자는 두 피연산자의 값을 비교하는 용도로 사용하는 연산자로
주로 조건 분기문인 if와 반복문인 for에서 사용합니다.
연산자의 기호 및 용도는 아래 표와 같으며 이어서 두 개의 예제를 준비했습니다.
우선 첫 번째 예제는 왼쪽의 피연산자의 값이 오른쪽 피연산자의 값보다 작은 경우입니다.
두 번째는 두 피연산자의 값이 같은 경우의 예제입니다.
관계 연산자는 예제의 결과에서도 알 수 있듯이 연산 결과를 true, false로 출력한다는 것이 중요합니다.
논리 연산자
논리 연산자는 조건부 논리 연산자라고도 하며 bool 값에 대한 연산만 수행합니다.
(int형에 대한 논리 연산은 아래의 비트 연산자에서 다뤘습니다.)
논리 연산이라고 하면 AND와 OR연산자가 대표적이지만 '!'인 NOT연산자도 조건부 논리 연산자에 속합니다.
먼저 AND연산자는 '조건부 논리곱 연산자'라고도 합니다.
말 그대로 두 값(true or false)을 곱셈 연산한다고 생각하시면 할 듯합니다.
AND연산자의 진리표와 예제는 다음과 같습니다.
두 번째로 OR연산자는 '조건부 논리합 연산자'라고도 합니다.
논리곱인 AND와는 다르게 두 값(true or false)을 덧셈 연산한다고 생각하시면 편할 듯합니다.
OR 연산자의 진리표와 예제는 다음과 같습니다.
마지막으로 반대 값을 출력하는 NOT 연산자(조건부 논리 부정 연산자)입니다.
역시 진리표 및 예제는 아래와 같습니다.
비트 연산자
이번에 설명하려 하는 비트 연산자도 논리 연산자와 비슷합니다.
위에서 언급했듯이 논리 연산자는 bool값에 대한 논리 연산을 수행한다면,
비트 연산은 정수에 대한 논리 연산을 수행합니다.
예제를 확인한 후 자세히 설명하겠지만 비트 연산은 해당 변수의 정수값을 2진수로 변환한 후
논리 연산을 수행합니다.
이어서 바로 예제를 확인해보겠습니다.
먼저 AND와 OR연산입니다.
위의 예제를 보면 a의 값인 '1'과, b의 값인 '5'의 2진수 값은 아래 표와 같이 a='0001', b='0101'입니다.
이 두 값을 각각 논리곱, 논리합 연산하면 아래 표와 같이 논리곱은 '0001', 논리합은 '0101'이 나오기 때문에
각각 '1'과 '5'가 결과값으로 나오는 것입니다.
이어서 XOR연산입니다.
XOR연산의 배타 논리합 연산으로 OR연산을 반대로 한다고 생각하시면 편합니다.
표에서는 8비트로 표현했지만 int형은 32비트입니다.
너무 길어서 편의상 8비트까지만 작성한 것입니다.
시프트 연산자
시프트 연산자는 비트 연산과 마찬가지로 해당 값의 2진수 비트값을 사용하는 연산자입니다.
연산자의 종류로는 아래 표와 같이 '<<', '>>' 이렇게 두 개가 있습니다.
그럼 예제와 함께 설명하겠습니다.
첫 번째 예제는 좌측 시프트 연산자입니다.
int형 값 '11'을 좌측 시프트 연산을 사용하여 좌측으로 각각 1칸, 3칸, 6칸 이동한 결과입니다.
아래 표를 보시면 변수 'a'에 할당된 값인 '11'의 2진수 값은 '1011'입니다.
이 2진수 데이터를 좌측으로 1칸 이동하면 2진수 값은 '10110'이며, 10진수로 22입니다.
이러한 방법으로 3칸 이동한 값인 '1011000'과 6칸 이동한 '1011000000'의
10진수 값인 '88'과 '704'가 출력되는 것입니다.
이동 후 비어있는 공간은 '0'이 채워집니다.
두 번째로 우측 시프트 연산자입니다.
먼저 설명한 좌측 시프트 연산자와 동일하게 동작하며 이름과 같이 우측으로 이동하는 연산자입니다.
좌측 시프트 연산자와 조금 다른 점이 있다면 우측으로 이동하면서 값이 점점 사라집니다.
'1011'을 우측으로 1칸 이동하면 첫 번째 자리의 1은 버려지기 때문에 '101'이 됩니다.
마찬가지로 3칸 이동하면 '011'이 버려지게 되어 '1'이 되며,
6칸 이동하면 '001011'이 버려지고 값은 0이 됩니다.
좌측 시프트 연산자의 경우 해당 2진수의 우측에 추가 이동하는 칸만큼 0을 넣고,
우측 시프트 연산자는 좌측에 0을 넣어서 생각을 해도 됩니다.
각각 반대방향에 0을 추가하는 방식입니다.
여기까지 기본적인 연산자에 대해 설명해봤습니다.
모든 연산자에는 우선순위가 있으니 복잡한 연산식을 구성하신다면 MSDN에서 연산자의 우선순위에 대해서도 알아보시면 좋을 것 같습니다.
제 글에서는 수식, 할당 등등으로 나누었지만 단항 또는 이항 연산자로 나누기도 합니다.
그런 의미에서 다음 글은 삼항 연산자에 대해 다뤄보도록 하겠습니다.
감사합니다.
'Programming > .NET' 카테고리의 다른 글
[C#] 07. 조건분기문(if-else, switch-case) (0) | 2020.05.12 |
---|---|
[C#] 삼항 연산자 (0) | 2020.05.04 |
[C#] 06. 연산자(수식, 증감, 할당) (0) | 2020.04.12 |
[C#] 05. var와 object (0) | 2020.03.29 |
[C#] 04. 자료형 (0) | 2020.03.21 |