코틀린 독학 5일차_2 :: 코틀린 연산자
자바에서도 연산자를 배웠기 때문에
건너 뛰어야겠다 생각했는데
책 첫문구에 코틀린에만 있는 연산자와 코틀린에서 사용하지 않는 연산자가
있다는 말을 보고..
다시 한번 개념 정리할 겸 공부했다!
-
기본연산자는 자바와 같이
산술, 대입, 증가, 감소, 비교, 논리 연산자 등등이 있다
수식의 구조
수식의 구조는
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ㅇ
내일만 지나면 연휴니까 연휴동안 함수공부 열심히 해야겠다 !!