kotlin

코틀린 독학 5일차_2 :: 코틀린 연산자

yoneeee 2021. 2. 9. 23:26

자바에서도 연산자를 배웠기 때문에 

건너 뛰어야겠다 생각했는데 

책 첫문구에 코틀린에만 있는 연산자와 코틀린에서 사용하지 않는 연산자가 

있다는 말을 보고.. 

다시 한번 개념 정리할 겸 공부했다!

-

기본연산자는 자바와 같이

산술, 대입, 증가, 감소, 비교, 논리 연산자 등등이 있다

수식의 구조

수식의 구조는 

val result =(대입 이항 연산자) num1(항) + num2(항) 의 형식으로 되어있다.

다른 언어로 수식을 해본 사람이라면 

어렵지 않은 수식 구조일 것이다.

산술연산자 종류로는 

+, -, *, /, % 가 있으며

어려울 건 없다.

여기서 특별히 기억해둬야 하는 연산자 종류는 "%" !!

%는 나머지 연산으로 홀수나 짝수 같은 특정 구간의 수를 알아낼 때 유용하다.

홀수와 짝수를 검사하는 코드로 쉽게 이해해보자

-

n을 2로 나눴을 때 나머지가 1이면 홀수, 0이면 짝수 라는 코드이다.

 

■ 대입연산자

 

대입연산자 (=) 는 말 그대로 변수에 값을 할당하는 연산자다.

대입 연산자는 이항 연산자 중 우선순위가 가장 낮은 연산자로,

다른 연산자의 연산이 모두 끝나고 동작하는 연산자이다.

 

val numOfApple = 12 // 변수가 대입 연산자에 의해 할당

val result = numOfApple -2 //표현식이 대입 연산자에 의해 결괏값 할당 

 

또한 어떤 변수에 저장된 값(num)으로 연산을 수행한 후

그 결괏값(num + 2 )를 다시 변수에 할당할 때 

산술 연산자와 대입연산자를 함께 사용하여 간결하게 표현할 수 있다

 

num = num+2

num +=2 // 이렇게 표현 가능 

 

■대입연산자 정리 

 

연산자 의미 사용 예시
= 오른쪽 항의 내용을 왼쪽 항에 대입 num = 2
+= 두 항을 더한 후 왼쪽 항에 대입 num += 2
-= 왼쪽 항을 오른쪽 항으로 뺀 후
왼쪽 항에 대입
num -= 2
*= 두 항을 곱한 후 왼쪽 항에 대입 num *= 2
/= 왼쪽 항을 오른쪽 항으로 나눈 후
왼쪽 항에 대입
num /= 2
%= 왼쪽 항을 오른쪽 항으로 나머지 연산 후 왼쪽 항에 대입 num %= 2

 

■ 증가 연산자와 감소 연산자

 

연산자 의미 사용 예
++ 항의 값에 1 증가 ++num or num++
-- 항의 값에 1 감소 --num or num--

 

증가 연산자와 감소연산자는 자주 사용하게 되는데

연산자를 항 앞에 붙이는 것과 항 뒤에 붙이는 것은 

각각 저장되는 값이 달라지므로 주의해야한다.

-

항 앞에 연산자를 붙이게 되면 연산을 마친 다음에 그 값을 대입하고,

항 뒤에 연산자를 붙이면 먼저 그 값을 대입한 후 연산을 수행한다.

 

코드를 통해 확인해보자

result1과 result2가 어떻게 다른지 확인해보자

num1앞에 ++를 사용하는 경우에는 

num1값을 먼저 증가한 후 값을 대입하기 때문에 11이 출력되고,

-

num2 뒤에 ++를 사용하면 먼저 값을 대입한 후 증가하기 떄문에 10이 출력된다.

증감 연산자인 --에도 똑같이 적용된다.

 

비트연산자 알아보기

비트연산자 좀 어렵네 .. 

나 이런게 어렵네 ;;...

비트연산자는 기계가 이해할 수 있는 값인 0 과 1 을 처리하는 데 사용한다.

 

■ 비트와 비트 연산

Int형 값 10을 비트로 표현하려면 

10을 2진수로 바꾸면 된다.

 

■ 비트 이동 연산자 shl, shr

비트 이동 연산자에는 shl과 shr이 있다.

비트를 왼쪽으로 이동할 땐 shl,

오른쪽으로 이동할 땐 shr을 사용하는데,

왼쪽이나 오른쪽으로 비트를 밀어낸 다음 사라진 비트의 값은 

0으로 채우며 부호 비트는 그대로 둔다.

(어려웡.;;)

-

4 shl 1 이라고 하면 

비트를 왼쪽으로 1만틈 옮기는 것인데,

이거는 2를 곱하는 것과 같다 

그래서 4의 비트값은 원래 4에 2를 곱해 8이 된다.

-

반대로 shr을 사용하여 오른쪽으로 밀어내면

2를 나눈 값과 같다.

64 shr 2 는 64에 4를 나눈 값과 동일하다.

-

이렇게만 보면 비트연산자가 뭔지

헷갈리기 때문에 실습을 통해서 차근차근 이해해보자

이렇게 코드를 작성하고 실행해보면

이러한 결과가 출력된다.

 

■논리합 연산자 or

or 은 두 수의 비트를 일대일 대응으로 비교했을 때

비트의 값이 하나라도 1이면 1을 반환한다.

코드로 예제를 확인해보자

1대1대응을 통해 1의 값을 반환하여 

result 값을 출력하면 29가 나온다 

-

12 = 0000 1100 (2진값)

25 = 0001 1001 (2진값)

-------------------------------------------

29 = 0001 1101 (2진값)

이런방식이다.

실행시켜 result 값이 29가 맞는지 확인해보자

good :)

 

비슷한 맥락으로 논리곱 연산자 and 와 배타적합 연산자 xor 이 있는데

and 연산자는 두 비트 값 모두 1일 때 1을 반환하고 그 이외는 모두 0 을 반환한다.

-

xor 연산자는 두 비트값을 비교했을 때 같으면 0을,

다르면 1을 반환한다.

or 의 기능과 반대라고 생각하면 쉽게 이해할 수 있다.

-

 

- 5일차 공부를 마치며 -

아직까지 크게 어렵다고 느꼈던 부분은 없지만

진수 계산 부분이 아직 헷갈려서 비트 부분이 조금 헷갈렸다.

학교 다닐 때도 자료구조 공부할 때 

진수 계산 한참 걸리고 그랬는데..

날 잡아서 진수 공부 한번 해야할 것 같다 ㅋㅋ ㅠㅠ 

이제 좋은 시절 다 갔고 

다음 챕터는 함수,, 극혐이야 ㅇ0ㅇ

내일만 지나면 연휴니까 연휴동안 함수공부 열심히 해야겠다 !!