연산자

이번 시간엔 여러 가지 연산자에 대하여 알아보겠습니다.

연산자는 연산, 비교 등 여러 코드와 알고리즘에서 사용되는 프로그래밍에 필수적인 요소입니다.


단항 연산자

 a = -10;
!b;
a++;

연산에 한 개의 대상이 필요한 연산자를 단항연산자(Unary Operators)라고 합니다.

이항연산자보다 연산 우선순위가 높기 때문에, 복잡한 알고리즘을 구현해야 할 땐, 주의해야 합니다.

이항 연산자

i = 10 + 20;
i = 30 / 40;
i = 30 * 20;
i = 10 % 2;
a = a + 1;

연산의 대상이 2개가 되는 연산자를 이항 연산자(Binary Operators)라고 합니다.

산술 연산자

a + b // 덧셈
a - b // 뺄셈
a * b // 곱셈
a / b // 나눗셈
a % b // 나머지 값 계산

산술 연산자는 사칙 연산을 위한 연산자입니다.

기본적으로 연산 시 데이터 방식을 통일하고 연산이 이루어집니다.


만약 데이터 타입이 서로 다른 경우, 사이즈가 큰 변수나 유효숫자가 큰 변수의 데이터 타입으로 자동 변환되어 연산됩니다.

만일 int 방식과 int 방식이 나누어졌을 때, 서로 정수 형태이기 때문에, 소수점은 무시되어 몫만 구할 수 있습니다.


산술 연산자의 우선순위

산술 연산자의 우선순위는 간단하게 수학 시간에 배웠던 방식으로 생각할 수 있습니다.

곱셈 관련 연산자가 먼저 계산되고, 덧셈, 뺄셈 관련 연산자는 이후에 계산됩니다.

만약 덧셈과 뺄셈을 먼저 계산해야 하는 경우엔, 수학 시간에 배운 것 처럼, 괄호()를 활용할 수 있습니다

(a + b) * c


치환 연산자

a = 10;
b = 20;
c = 30;

num = a + b + c;

a = a + 1;

변수의 초기화에서 사용했던 = 연산자를 치환 연산자라 합니다.

치환 연산자는 좌변의 변수에 우변의 결과값을 넣는 연산자입니다.

좌변과 우변의 데이터 타입이 다른 경우엔 좌변에 데이터 타입에 맞게 변환되어 치환됩니다.

a = b = c = 100;

여러 변수를 한 번에 같은 값을 넣을려면 위와 같이 활용할 수 있습니다.


증감 연산자

a = a + 1;

위 구문은 변수에 1을 더하는 방법입니다.

위 방식을 축약하여 사용하는 방식이 증감 연산자(Increment, Decrement Operators)입니다.

++ : 피연산자 변수에 1을 더합니다. -- : 피연산자 변수에 1을 뺍니다.

위의 구문과 동일한 결과로 1을 더하지만, 연산자의 위치에 따라 결과 값이 달라집니다.


prefix

++number;
--number;

증감연산자가 피연산자 변수 앞에 붙는 경우입니다.

다른 연산보다 증감 연산이 먼저 이루어집니다.


예시

int a = 1;

int b = ++a;

위 경우, b 변수를 초기화하기 이전에 a의 증감이 먼저 이루어 지기 떄문에, a가 먼저 2로 증가하고 b는 2로 초기화 됩니다


postfix

value++;
value--;

증감연산자가 피연산자 변수 뒤에 붙는 경우입니다.

다른 연산이 이루어진 이후에 증감 연산이 진행됩니다.


예시

int a = 1;

int b = a++;

위 경우, b의 초기화가 a인 1로 먼저 진행되고, 이후 a가 2로 증감이 이루어집니다.


증감 연산자를 활용하면 코드를 간결하게 만들 수 있습니다.

하지만, 코드 한 줄에 2번 이상 사용하게 되면, 예측이 어려워 사용이 권장되지 않습니다.

관계 연산자

관계 연산자는 두 변수를 비교하기 위한 연산자입니다.

이후 설명할 조건문과 반복문에서 주로 활용합니다.

‘비교’를 위한 연산이기 때문에, 결과값은 true, false로 나옵니다.

a > b
a < b

미만, 초과를 비교하는 구문입니다.

> 좌변이 우변을 초과하는 경우 true

< 우변이 좌변을 초과하는 경우 true

수학 시간에 공부했던 내용처럼, 변수가 서로 같은 경우엔 결과가 false 입니다.


a >= b
a <= b

이상, 이하를 비교하는 구문입니다.

>= 좌변이 우변 이상인 경우 true

<= 우변이 좌변 이상인 경우 true

같은 값을 포함하기 때문에, 서로 같은 경우에도 결과가 true 입니다.


a == b
a != b

두 변수가 같은 값을 가졌는지 확인하는 구문입니다. == 좌변과 우변이 같은 값인 경우 true

!= 좌변과 우변이 같은 값인 경우 false

논리 연산자

truefalse 같은 참, 거짓의 조건을 검사하는 연산자입니다.

변수의 범위를 지정하는 경우처럼, 여러 조건을 검사하는 경우에 조건문에서 주로 활용됩니다.

1 && 1   
1 || 0    

&& 양 변이 참인 경우에만 true

|| 양 변중 한 변만 참이어도 true


비트 연산자

컴퓨터를 조금이라도 공부하신 분들이라면 다들 아시겠지만, 컴퓨터의 데이터는 2진법으로 저장됩니다.

아래서 설명할 연산자들은 데이터를 2진수로 변환하여 비교, 연산하는 연산자 입니다.

기본적으로 비교하는 과정에서는 논리 연산자와 유사한 느낌입니다.


비트 쉬프트 연산자

int value = 1; // 00000001
value = value << 2; // 000000100
value = value >> 2; // 000000001

비트 쉬프트 연산자는 변수의 2진수 데이터상에서 해당 데이터를 옆으로 밀어주는 연산자 입니다.

변수의 데이터 크기범위를 초과하여 밀려난 데이터는 사라지게(0) 됩니다.

>> 우변의 크기만큼 좌변의 데이터를 우측으로 이동합니다.

<<우변의 크기만큼 좌변의 데이터를 좌측으로 이동합니다.


(12345678) << 2 -> (34567800)
(12345678) >> 2 -> (00123456)

데이터를 좌우측으로 이동시키는 경우에는 2의 n 제곱을 변수에 곱하거나, 나눈다 생각하면 편리하게 계산할 수 있습니다.


AND 연산자

int value = 3;
int tmp = 2;
int and = value & tmp;

/*
00000011
00000010
-> 00000010
*/

AND연산자는 양 변의 데이터를 2진수로 비교하였을때, 같은 위치의 데이터가 양변 모두 1인 경우에 1로 연산해주는 연산자 입니다.


OR 연산자

int value = 3;
int tmp = 2;
int or = value | tmp;

/*
00000011
00000010
-> 00000011
*/

OR연산자는 양 변의 데이터를 2진수로 비교하였을때, 같은 위치의 데이터가 양변중 하나라도 1인 경우에 1로 연산해주는 연산자 입니다.


NOR

int value = 3;
int tmp = 2;
int nor = value ^ tmp;

/*
00000011
00000010
-> 00000001
*/

NOR연산자는 양 변의 데이터를 2진수로 비교하였을때, 같은 위치의 데이터의 양변이 0 과 1인 경우에만 1로 연산해주는 연산자 입니다.


NOT

int value = 3;
int notValue = ~value;

/*
00000011
-> 11111100
*/

NOR연산자는 양 변의 데이터를 2진수로 바꾸고, 0과 1을 반전하는 연산자 입니다.



💡 지적 환영합니다

Comments