(Kotlin) Kotlin 연산자 및 우선 순위

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= 할당 연산자, 복합 할당