비트 연산자
연산자 | 의미 |
---|---|
and, .and(bits) | and, 모두 true일경우만 true |
or, .or(bits) | or, 모두 false일경우만 false |
xor, .xor(bits) | 배타적 OR, 두 값이 다르면 true |
.inv(bits) | not, 보수 연산으로 반전 |
.shr(bits) | not, 지정한 비트수 만큼 오른쪽으로 이동 |
.shl(bits) | not, 지정한 비트수 만큼 왼쪽으로 이동 |
.ushr(bits) | not, 부호 고려하지 않고 지정한 비트수 만큼 오른쪽으로 이동 |
fun main() {
val a = 1
val b = 0
println("and: ${a and b}, or: ${a or b}, xor: ${a.xor(b)}, inv: ${a.inv()}")
}
and: 0, or: 1, xor: 1, inv: -2
val a = 1
val b = 0
println("and: ${a and b}, or: ${a or b}, xor: ${a.xor(b)}, inv: ${a.inv()}")
}
and: 0, or: 1, xor: 1, inv: -2
1 shl 2 //1을 왼쪽으로 2 비트 이동
res1: kotlin.Int = 4
4 shr 2 //4를 오른쪽으로 2비트 이동
res2: kotlin.Int = 1
res1: kotlin.Int = 4
4 shr 2 //4를 오른쪽으로 2비트 이동
res2: kotlin.Int = 1
10진수를 2진수로 변환하기 위해 다음 메소드를 적용합니다.
객체.toString(2) : 10 진수인 객체를 2진수로 변환
다음과 같이 1과 4를 이진수로 변환하면 다음과 같습니다.
1.toString(2)
res3: kotlin.String = 1 // ....001
4.toString(2)
res4: kotlin.String = 100 // ....100
res3: kotlin.String = 1 // ....001
4.toString(2)
res4: kotlin.String = 100 // ....100
위에서 하나의 수는 1비트를 나타내며 1을 왼쪽으로 2비트 이동시키면 4가 됩니다.
이와같이 비트를 이동시키기 위해 shr(shift right) 또는 shl(shift left) 연산자를 적용합니다.
or, and 연산자를 수 연산에 적용할 수 있습니다. 이 경우 각 수를 2진수로 변환하여 진행합니다.
val n1=12
val n2=25
val result: Int=n1.or(n2)
result
res0: kotlin.Int = 29
val n2=25
val result: Int=n1.or(n2)
result
res0: kotlin.Int = 29
위 계산과정은 다음과 같습니다.
1) n1, n2를 2진수로 변환합니다.
n1.toString(2)
res1: kotlin.String = 1100
n2.toString(2)
res2: kotlin.String = 11001
2) 각 객체의 변환결과의 동일한 위치의 숫자를 비교하여 "or" 논리 연산을 실시합니다.
예로 (0, 0) → 0, 다른 경우는 모두 1
결과는 다음과 같습니다.
n1 | 12 | 0 | 1 | 1 | 0 | 0 |
n2 | 25 | 1 | 1 | 0 | 0 | 1 |
result | 29 | 1 | 1 | 1 | 0 | 1 |
val re: Byte=0b11101
re.toInt()
res3: kotlin.Int = 29
비교 연산자
두 객체의 비교로 결과는 boolean으로 반환됩니다.연산자 | dot연산자 | 의미 | |||
---|---|---|---|---|---|
a > b | a.compareTo(b) > 0 | 크다 | |||
a < b | a.compareTo(b) < 0 | 작다 | |||
a >= b | a.compareTo(b) >= 0 | 크거나 같다 | |||
a <= b | a.compareTo(b) <= 0 | 작거나 같다 | |||
a == b | a.equals(b) | 같다 | |||
a != b | !(a.equals(b)) | 같지않다 |
val n1=12
val n2=25
n1>n2
res1: kotlin.Boolean = false
n1<=n2
res2: kotlin.Boolean = true
n1.compareTo(n2)>0
res3: kotlin.Boolean = false
n1==n2
res4: kotlin.Boolean = false
n1.equals(n2)
res5: kotlin.Boolean = false
n1!=n2
res6: kotlin.Boolean = true
!(n1.equals(n2))
res7: kotlin.Boolean = true
val n2=25
n1>n2
res1: kotlin.Boolean = false
n1<=n2
res2: kotlin.Boolean = true
n1.compareTo(n2)>0
res3: kotlin.Boolean = false
n1==n2
res4: kotlin.Boolean = false
n1.equals(n2)
res5: kotlin.Boolean = false
n1!=n2
res6: kotlin.Boolean = true
!(n1.equals(n2))
res7: kotlin.Boolean = true
논리 연산자
논리연산자는 2가지가 있습니다.
연산자 | 대응함수 | 의미 |
---|---|---|
(a>b) || (a<c) | (a>b) or (a<c) | 한 부분만 true이면 true |
(a>b) && (a<c) | (a>b) and (a<c) | 두 부분 모두 true인 경우만 true |
val a=9
val b=12
val c=3
(a<b) ||(a>c)
res1: kotlin.Boolean = true
(a>b)&&(a<c)
res2: kotlin.Boolean = false
(a>b)and(a<c)
res3: kotlin.Boolean = false
(a>b)or(a<c)
res4: kotlin.Boolean = false
val b=12
val c=3
(a<b) ||(a>c)
res1: kotlin.Boolean = true
(a>b)&&(a<c)
res2: kotlin.Boolean = false
(a>b)and(a<c)
res3: kotlin.Boolean = false
(a>b)or(a<c)
res4: kotlin.Boolean = false
in 연산자
원소가 객체에 포함되어 있는지를 검사하기 위해 사용합니다.연산자 | 대응함수 | 의미 |
---|---|---|
x in Obj | Obj.constains(x) | 원소 x가 객체 Obj에 포함 |
x !in Obj | !Obj.constains(x) | 원소 x가 객체 Obj에 포함 되지 않음 |
val num=intArrayOf(1, 9, 23,76)
4 in num
res1: kotlin.Boolean = false
num.contains(23)
res2: kotlin.Boolean = true
!num.contains(2)
res3: kotlin.Boolean = true
4 in num
res1: kotlin.Boolean = false
num.contains(23)
res2: kotlin.Boolean = true
!num.contains(2)
res3: kotlin.Boolean = true
Index 접근 연산자
array와 collect 등 여러 원소를 가지는 객체에서각 원소는 객체내에서 0, 1, 2,... 과 같이 고유의 주소를 가집니다.
그 객체내에 특정한 원소에 접근하거나 수정할 경우 index 연산자 또는 get(), set()을 사용합니다.
get(index): 지정한 인덱스 값을 호출
set(index, val): 지정한 인덱스의 값을 val로 수정
set(index, val): 지정한 인덱스의 값을 val로 수정
연산자 | 대응함수 | 의미 |
---|---|---|
a[i] | a.get(i) | 인덱스 i 값을 호출 |
a[i]=c | a.set(i, c) | 인덱스 i의 값을 c로 수정 |
import java.util.Arrays
fun main(){
var arr=arrayOf('a', 'b', 'c', 32, 15, 27)
println(Arrays.toString(arr))
println("arr[1]: $/$${arr[1]}")
println("arr.get(3):" +arr.get(3))
arr[3]=320
println("arr[3]=320 :"+Arrays.toString(arr))
arr.set(0, "change")
println("arr.set() 적용:"+Arrays.toString(arr))
}
[a, b, c, 32, 15, 27]
arr[1]: b
arr.get(3):32
arr[3]=320 :[a, b, c, 320, 15, 27]
arr.set() 적용:[change, b, c, 320, 15, 27]
fun main(){
var arr=arrayOf('a', 'b', 'c', 32, 15, 27)
println(Arrays.toString(arr))
println("arr[1]: $/$${arr[1]}")
println("arr.get(3):" +arr.get(3))
arr[3]=320
println("arr[3]=320 :"+Arrays.toString(arr))
arr.set(0, "change")
println("arr.set() 적용:"+Arrays.toString(arr))
}
[a, b, c, 32, 15, 27]
arr[1]: b
arr.get(3):32
arr[3]=320 :[a, b, c, 320, 15, 27]
arr.set() 적용:[change, b, c, 320, 15, 27]
댓글
댓글 쓰기