본문 바로가기

# 02/코틀린

[Kotlin] 기본 연산자

반응형

대입 연산자


num = 2

num += 2

num -= 2

num *= 2

num /= 2

num %= 2


// 간략하게 표시가능 왼쪽 항의 값을 오른쪽 값과 연산 후 왼쪽 변수에 대입



증가 연산자와 감소 연산자


++ 항의 값에 1 증가    ++num 또는 num++

-- 항의 값에 1 감소      --num 또는 num--


fun main() {

var num1 = 10

var num2 = 10

val result1 = ++num1    // num 값 증가 후 대입

val result2 = num2++    // 먼저 num 값 대입 후 증가


println("result1 : $result1")                             // 증가된 11

println("result2 : $result2")                             // 증가되기 전의 10이 할당되므로 주의!!

println("num1 : $num1")                               // 11

println("num2 : $num2")                               // 11


}



비교 연산자


>

<

>=

<=

==                              두 개 항의 값이 같으면 true, 다르면 false

!=                               두 개 항의 값이 다르면 true, 같으면 false

===                            두 개 항의 참조가 같으면 true, 다르면 false (자바에는 없음)

!==                             두 개 항의 참조가 다르면 true, 같으면 false (자바에는 없음)


특히 자바의 ==는 참조를 비교하는 연산자로 코틀린의 ===와 같고

자바에서 값을 비교할 때는 equals()를 사용하므로 코틀린의 == 와 다르므로 주의해야함!!



논리 연산자


&&   그리고 논리곱                  exp1 && exp2    둘 다 참이여야지 참

||       또는 논리합                    exp1 || exp2        하나만 참이여도 참

!       부정 단항 연산자                !exp               반대. 참이면 거짓 거짓이면 참.



0000 0000 0000 0000 0000 0000 0000 0001(2)

1(10)

0x1(16)


0000 0000 0000 0000 0000 0000 0000 0010(2)

2(10)

0x2(16)


0000 0000 0000 0000 0000 0000 0000 0100(2)

4(10)

0x4(16)


0000 0000 0000 0000 0000 0000 0000 1000(2)

8(10)

0x8(16)


0000 0000 0000 0000 0000 0000 0000 1111(2)

15(10)

0xF(16)


0000 0000 0000 0000 0000 0000 0001 0000(2)

16(10)

0x10(16)


0000 0000 0000 0000 0000 0000 0010 0000(2)

32(10)

0x20(16)


0000 0000 0000 0000 0000 0000 0100 0000(2)

64(10)

0x30(16)


0000 0000 0000 0000 0000 0000 1000 0000(2)

128(10)

0x40(16)


0000 0000 0000 0000 0000 0001 0000 0000(2)

256(10)

0x100(16)


0100 0000 0000 0000 0000 0000 0000 0000(2)

1,073,741,824(10)

0x4000 0000(16)


0111 1111 1111 1111 1111 1111 1111 1111(2)

2,147,483,647(10)

0x4FFF FFFF(16)


1000 0000 0000 0000 0000 0000 0000 0000(2)

-2,147,483,648(10)

0x8000 0000(16)


원으로 되어있음 최대값에서 1커지면 최소값으로 바뀜 이진수 맨앞의 값은 부호값 0은 + 1은 -


1000 0000 0000 0000 0000 0000 0000 0001(2)

-2,147,483,647(10)

0x8000 0001(16)


1000 0000 0000 0000 0000 0000 0000 0010(2)

-2,147,483,646(10)

0x8000 0002(16)


1씩 커질때마다 음수값도 1씩커짐 (절댓값은 1씩 작아짐)


1111 1111 1111 1111 1111 1111 1111 1111(2)

-1(10)

0xFFFF FFFF(16)



비트 연산자


4.shl(bits)       4를 표현하는 비트를 bits만큼 왼쪽으로 이동(부호 있음)   - 중위 표현식 제공! (4 shl 2 표현 가능)         

 예) 4.shl(2) = 0001 0000(2) = 16(10)

 4는 0100(2) 이므로 1을 왼쪽으로 2칸 이동하면 0001 0000(2)가 됨!


7.shr(bits)       7을 표현하는 비트를 bits만큼 오른쪽으로 이동(부호 있음)   - 중위 표현식 제공! (7 shr 2 표현 가능)       

 예) 7.shr(2) = 0001(2) = 1(10)

 7은 0111(2) 이므로 1을 오른쪽으로 2칸 이동하면 0001(2)가 됨!


12.ushr(bits)    12를 표현하는 비트를 bits만큼 오른쪽으로 이동(부호 없음 - 앞의 부호값도 이동됨)   - 중위 표현식 제공! (12 ushr 2 표현 가능)      

 예) 12.ushr(2) = 0011(2) = 3(10)

 12는 1100(2) 이므로 1을 오른쪽으로 2칸 이동하면 0011(2)가 됨!


9.and(bits)       9를 표현하는 비트와 bits를 표현하는 비트로 논리곱 연산      - 중위 표현식 제공! (9 and 2 표현 가능)         

 예) 9.and(2) = 0000(2) = 0(10)

 9 = 1001(2) , 2 = 0010(2) 논리곱은 각 자리값 끼리 비교해서 둘 다 1이면 1 그렇지 않으면 0 으로 표현함.


4.or(bits)         4를 표현하는 비트와 bits를 표현하는 비트로 논리합 연산      - 중위 표현식 제공! (4 or 2 표현 가능)        

 예) 4.or(2) = 0110(2) = 6(10)

 4 = 0100(2) , 2 = 0010(2) 논리합은 각 자리값 끼리 비교해서 둘 중 하나라도 1이 있으면 1로 표현함.


24.xor(bits)      23를 표현하는 비트와 bits를 표현하는 비트의 배타적 연산      - 중위 표현식 제공! (12 xor 25 표현 가능)        

 예) 12.xor(25) = 0001 0101(2) = 21(10)

 12 = 0000 1100(2) , 25 = 0001 1001(2) 각 자리값 끼리 비교해서 두수가 0 또는 1로 같으면 0 다르면 1로 표현함.


5.inv            5를 표현하는 비트를 모두 뒤집음

5 = 0101(2) 각 자리수가 0이면 1로 1이면 0으로 반대로 표현함.

5.inv = 1010(2) = 10(10)


음수값을 이진법으로 바꾸고 싶을때 음수값과 더해서 -1이 되는 양수값을 찾는다. 그 양수값을 이진법으로 나타낸뒤 모든 자릿수의 1과 0을 바꿔주면됨.

 예) -5 = 1111 ... 1011(2)

 -5와 더해서 -1이 되는 양수값은 4, 4 = 0100(2)



반응형

'# 02 > 코틀린' 카테고리의 다른 글

[Kotlin] 자료형 변환  (0) 2019.07.03
[Kotlin] 변수의 null  (0) 2019.07.03
[Kotlin] 패키지  (0) 2019.07.03
[Kotlin] 변수와 자료형  (0) 2019.07.03
[Kotlin] Basic syntax  (0) 2019.02.13