-
Swift - 비트연산자developing study 2024. 1. 24. 22:02
지도 문제를 푼 후 다른 사람의 풀이를 보다가 알게 된 것.
/// arr1 :[Int], arr2[Int] /// 0부터 n까지 map으로 도는 클로저 안의 코드 String(arr1[$0] | arr2[$0], radix: 2)
문제를 간략히 말하면
2개의 10진수로 된 숫자를 2진수로 변환했을 때 각 이진수를 비교하는 상황이다.
둘다 0인 경우와 하나라도 1인 경우를 구분해줘야 했다. 이때 비트 연산자를 사용해 쉽게 풀 수 있는 문제였다.
비트연산자란
한 개 혹은 두 개의 이진수에 대해 비트(bit)단위로 논리 연산을 할 때 사용하는 연산자
비트 단위로 전체 비트를 왼쪽이나 오른쪽으로 이동시킬 때도 사용.
종류
비트 연산자에는 &, |, ^, ~, <<, >> 이렇게 있는데 이번에 새로 알게된 연산자도 있었다..
1) AND (&)
대응되는 두 비트가 모두 1일 때만 1을 반환. 다른 경우는 모두 0.
2)OR(|)
대응되는 두 비트 중 하나라도 1이면 1 반환. 아니면(=두 비트가 모두 0일 때만) 0 반환.
3)XOR(^)
대응되는 두 비트가 서로 다르면 1을 반환. 서로 같으면 0 반환.
4)NOT(~)
해당 비트가 1이면 0 반환, 0이면 1 반환.
- 각 자릿수 값을 반대로 바꾸는 연산이라고 생각하면 쉬움.
여기까지는 이렇게 활용하면 되겠다!하고 이해가 됐다. 근데,,
5) 시프트 연산자 (<<, >>)....이건 나중에 다시 코드로 연습해봐야겠다.
정수를 2배로 곱하거나 나누는 효과
정수의 저장 범위를 벗어나는 모든 비트는 버려진다.- Left shift(<<)
해당 자릿수의 비트를 왼쪽으로 n칸 옮기고 n칸은 0으로 채워짐.
왼쪽으로 이동시 값이 2배가 된다. - Right shift(>>)
해당 자릿수 비트를 오른쪽으로 n칸 옮기고 n칸은 0으로 채워짐.
'developing study' 카테고리의 다른 글
[Swift] Combine - sink (0) 2024.08.25 TCA 적용해 iOS앱 만들기 - 첫번째 (0) 2024.08.24 Swift - prefix, suffix (0) 2024.01.12 Swift - replacingOccurences/Subrange (0) 2024.01.12 Swift - CaseIterable (1) 2024.01.12 - Left shift(<<)