Kotlin에는 일반적으로 산술 연산자, 할당 연산자, 복합 할당 연산자, 증분 연산자, 비교 연산자, 논리 연산자 및 비트 연산자가 있습니다.
이 연산자가 무엇이고 우선 순위가 무엇인지 봅시다.
1. 산술 연산자
산술 연산자는 더하기, 빼기, 곱하기, 나누기 및 나머지 연산을 수행하는 연산자입니다.
운영자 | 설명하다 | 예 |
+ | 에 추가 | a+b |
– | 빼기 | ab |
* | 곱셈 | a*b |
/ | 분배하다 | A/B |
% | 나머지 연산 | %비 |
// 산술 연산자
var a = 5
var b = 3
var sum = a + b // 8
var difference = a - b // 2
var product = a * b // 15
var quotient = a / b // 1
var remainder = a % b // 2
나머지 연산자는 몫과 나머지가 나머지를 산출할 때 나머지를 표현합니다.
2. 할당 연산자
할당 연산자는 변수에 값을 할당(할당)하는 데 사용되는 연산자입니다.
운영자 | 설명하다 | 예 |
= | 과제 | x=5 |
// 대입 연산자
var number : Int = 22
3. 복합 할당 연산자
복합 대입 연산자는 대입 연산자와 산술 연산자를 결합하여 결과를 왼쪽 변수에 대입합니다.
운영자 | 설명하다 | 예 |
+= | a=a+b, a에 b와 a를 더한 결과 대입 | +=비 |
-= | a=ab, a에서 b를 뺀 결과를 a에 대입 | a-=b |
*= | a=a*b, a에 b를 곱한 결과를 a에 대입 | a*=b |
/= | a=a/b, a를 b로 나눈 결과를 a에 대입 | a/=b |
%= | a=a%b, b를 a에 할당하고 연산 결과의 나머지를 a에 할당 | %=b |
// 복합대입연산자
var a = 5
var b = 3
a += b // a = 8
b -= 2 // b = 1
a *= b // a = 8
b /= 2 // b = 0
a %= 3 // a = 2
4. 증분 연산자
이 연산자는 변수 값을 1씩 늘리거나 줄입니다.
운영자 | 설명하다 | 예 |
++ | 1씩 증가 | ++, ++ㄱ |
— | 1끼 덜먹음 | 하나씩 |
연산자가 추가되는 위치가 다르고, 값도 다르며, ++a와 같이 앞에 연산자가 추가되면 + 연산이 먼저 시작된 후 값이 할당됩니다.
반면 a++와 같은 연산자가 끝에 추가되면 a가 먼저 할당된 후 + 연산이 시작된다.
// 증감 연산자
var a = 5
var b = a++
println(a) // 6
println(b) // 5
우리는 a에 5를 할당하고 b에 a++를 할당합니다.
a++ 및 + 연산자는 변수 뒤에 있으므로 b=a가 먼저 실행된 다음 +1 연산이 실행됩니다.
// 증감 연산자
var a = 5
var b = ++a
println(a) // Output: 6
println(b) // Output: 6
이 코드는 a에 5를 할당하고 b에 ++a를 할당합니다.
++a, ++ 연산자가 변수 앞에 있기 때문에 +1 연산이 먼저 시작되고 b=a 연산이 나중에 수행됩니다.
이것은 어떤 연산자 ++a 또는 a++가 먼저 오는지에 따라 매우 혼란스러울 수 있습니다.
앞에 ++ 연산자가 있으면 +1을 더한 후 대입한다.
앞에 a가 있으면 b=a 연산을 수행한 다음 +1을 수행합니다.
이것을 기억할 수 있으면 좋겠습니다.
5. 비교 연산자
비교 연산자는 말 그대로 비교를 수행하는 연산자입니다.
두 변수 객체를 비교하고 부울 유형 true 또는 false를 반환합니다.
운영자 | 설명하다 | 예 |
== | 등가 | A == B |
! = |
다른 | 하나! = b |
< | 더 작은 왼쪽 변수 | A < B |
> | 왼쪽 변수가 더 큽니다. |
A > B |
<= | 다음보다 작거나 같은 왼쪽 변수 | A <= B |
>= | 보다 크거나 같은 왼쪽 변수 | A >= B |
=== | 개체가 같음 | A === B |
! == |
개체가 다릅니다. |
! == 비 |
// 비교 연산자
var x = 5
var y = 3
var isEqual = x == y // false
var isNotEqual = x !
= y // true
var isLessThan = x < y // false
var isGreaterThan = x > y // true
var isLessThanOrEqual = x <= y // false
var isGreaterThanOrEqual = x >= y // true
== 및 === 모두 비교에 사용되지만 의미는 다릅니다.
== 만약, 비교값동일한지 확인합니다.
만약 ===, 참조 비교동일한 개체를 참조하는지 확인합니다.
참조 비교는 다음을 의미합니다.
개체가 생성될 때 해당 참조 값은 메모리의 주소를 가리킵니다.
따라서 이것은 개체가 동일한 메모리 주소를 가리키는지 확인하기 위해 개체를 비교한다는 의미입니다.
아래 코드를 확인해보자.
// ==, === 차이
var str1 = "hello"
var str2 = "hello"
var str3 = str1
println(str1 == str2) // true
println(str1 === str2) // true
println(str1 === str3) // true
var obj1 = Any()
var obj2 = Any()
var obj3 = obj1
println(obj1 == obj2) // false
println(obj1 === obj2) // false
println(obj1 === obj3) // true
str1 및 str2문자열 “hello”가 할당되고 str3에 str1의 값이 할당됩니다.
str1과 str2가 같은 값을 가지므로 true를 반환합니다.
str1과 str2의 참조를 비교할 때 str1에 ‘hello’가 할당됩니다.
동일한 문자열이 발생하면 이전에 생성된 문자열을 재활용합니다.
따라서 ===가 str1과 str2를 비교하더라도 true를 반환합니다.
str1과 str3도 동일한 참조 값을 가지므로 true를 반환합니다.
개체 1Any()라는 인스턴스가 할당되고 Any()의 인스턴스가 새 메모리 공간에 생성됩니다.
obj2도 Any()라는 인스턴스를 할당하고 이때 새로운 메모리 공간에 Any()의 인스턴스도 생성된다.
Obj3은 obj1에 값을 할당합니다.
여기서 obj3은 obj1과 동일한 메모리 주소를 참조합니다.
obj1과 obj2를 ==로 비교하면 인스턴스 값이 다르기 때문에 false가 반환됩니다.
obj1과 obj2를 ===로 비교하면 Any()가 서로 다른 인스턴스로 서로 다른 메모리 공간에서 생성되었기 때문에 false가 반환됩니다.
obj1과 obj3이 메모리에서 동일한 주소를 가지므로 true를 반환합니다.
6. 논리 연산자
논리 연산자는 참/거짓을 결정하는 논리식에 사용되는 연산자입니다.
두 개 이상의 조건을 평가하고 결과를 true 또는 false로 반환합니다.
운영자 | 설명하다 | 예 |
&& | 논리곱(AND) | a && b |
|| | 논리 AND(OR) | a||b |
! |
논리적 NOT(NOT) | ! ㅏ |
&& 연산자는 두 식이 모두 true인 경우에만 true를 반환하고 그렇지 않으면 false를 반환합니다.
|| 연산자는 두 표현식 중 적어도 하나가 참이면 참을 반환하고 두 표현식이 모두 거짓인 경우에만 거짓을 반환합니다.
!
연산자는 식의 결과가 참이면 거짓을 반환하고 거짓이면 참을 반환합니다.
// 논리 연산자
var a = true
var b = false
println(a && b) // false
println(a || b) // true
println(!
a) // false
7. 비트 연산자
비트 연산자는 비트 연산을 수행하는 연산자입니다.
이진수를 처리하며 정수 유형에만 사용할 수 있습니다.
운영자 | 설명하다 | 예 |
그리고 | 비트 AND 연산 | a와 b |
또는 | 비트 OR 연산 | 또는 비 |
XOR | 비트별 XOR 연산 | x 또는 b |
인보이스 | 비트 반전 연산 | 투자하다 ㄴ. |
쉿 | 왼쪽 시프트 연산 | shl b |
쉬르 | 오른쪽 쉬프트 연산 | 슈비 |
환영 | 부호 없는 오른쪽 시프트 연 | ushrb |
정수를 이진수로 나타냅니다.
and 연산은 0과 1을 비교하여 두 값이 모두 1인 경우에만 1을 반환합니다.
or 연산은 0과 1을 비교하여 두 값이 모두 0인 경우에만 0을 반환합니다.
XOR 연산은 두 비트가 다르면 1을 반환하고 같으면 0을 반환합니다.
inv 연산자는 비트를 반전시킵니다.
shl 연산은 비트를 왼쪽으로 이동하여 새 값을 반환합니다.
shr 연산은 오른쪽 이동으로 새 값을 반환합니다.
ushr 작업은 부호 없는 오른쪽 시프트를 수행하고 새 값을 반환합니다.
// 비트 연산자
val a = 3
val b = 5
val andResult = a and b // 0001 (1)
val orResult = a or b // 0111 (7)
val xorResult = a xor b // 0110 (6)
val invResult = a.inv() // 11111111111111111111111111111100 (-4)
val shlResult = a shl 1 // 0110 (6)
val shrResult = a shr 1 // 0001 (1)
val ushrResult = a ushr 1 // 0001 (1)
8. 우선권
우선 순위 | 운영자 | 설명하다 |
하나 | () | 괄호 |
2 | ! , ++, — |
논리 NOT, 증분 연산자(접두사) |
삼 | *, /, % | 곱셈, 나눗셈 및 나머지 연산 |
4 | +, – | 덧셈과 뺄셈 |
5 | 존재하다,! 존재하다 |
범위 확인 |
6 | <,<=、>,>= | 보다 작음, 보다 작거나 같음, 보다 큼, 보다 크거나 같음 |
7 | ==, ! = |
같은, 다른 |
8 | & | 비트 곱 |
9 | ^^ | 비트별 XOR |
10 | | | 비트 또는 |
11 | && | 논리 제품 |
12 | || | 논리합 |
13 | ? : | 엘비스 연산자 |
14 | =, +=, -=, *=, /=, %=, &=, |=, ^=, shr=, shl=, ushr= | 할당 연산자, 복합 할당 |