morijwana
수로그
morijwana
전체 방문자
오늘
어제
  • 분류 전체보기
    • 강의노트
    • Machine Learning
      • Pandas
      • NLP
    • Computer Science
      • Linux
      • TIL
    • Development
      • React
      • Swift
      • Javascript
    • 스터디 기록
      • Clean Code
      • 구글 BERT의 정석
      • 개발도서
      • 기타
    • Problem Solving
      • Baekjoon
      • ICPC Sinchon
    • 끄적
      • 끄적끄적
      • 요리왕

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Python
  • 백준
  • cs224n
  • 구부정스터디
  • 프로그래밍언어론
  • 데이터사이언스
  • 프레임워크없는프론트엔드개발
  • 구글BERT의정석
  • ML
  • Solution Challenge
  • Pandas
  • gdsc
  • 민트하임스터디
  • word2vec
  • GDSC Sookmyung
  • nlp
  • 회고
  • 자연어처리
  • 개발도서
  • Bert

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
morijwana

수로그

Development/Swift

[Swift]Swift가 제공하는 연산자들 - Operators in Swift (2)

2020. 7. 15. 14:30

비트 연산자 - Bitwise Operators

비트 단위로 연산하는 연산자. 첫 번째 비트를 부호 비트로 사용하는 signed type의 자료형은 비트 연산에 주의해야 한다.

  • 비트 NOT 연산자 - Bitwise NOT Operator 👉 ~a
value1 ~value1
0 1
1 0
// unsigned int8
let a : UInt8 = 0b0101_1011   // 91 (0101 1011)
let b : UInt8 = ~a            // 164(1010 0100)
// signed int8
let c : Int8 = 0b0101_1011    // 91 (0101 1011)
let d : Int8 = ~c             // -92(1010 0100)

 

  • 비트 AND 연산자 - Bitwise AND Operator 👉 a & b
    두 비트 모두 1이어야 1, 아니면 0이다.
value1 value2 value1 & value2
0 0 0
0 1 0
1 0 0
1 1 1
let a : UInt8 = 0b0101_1011    // 91(0101 1011)
let b : UInt8 = 0b0010_0001    // 33(0010 0001)
let val2 = a & b               // 1 (0000 0001)

 

  • 비트 OR 연산자 - Bitwise OR Operator 👉 a | b
    두 비트중에 하나라도 1이면 1, 둘 다 0이면 0이다.
value1 value2 value1 | value2
0 0 0
0 1 1
1 0 1
1 1 1
let a : UInt8 = 0b0101_1011    // 91 (0101 1011)
let b : UInt8 = 0b0010_0001    // 33 (0010 0001)
let val2 = a | b               // 123(0111 1011)

 

  • 비트 XOR 연산자 - Bitwise OR Operator 👉 a ^ b
    두 비트의 값이 달라야 1이고, 값이 같으면 0이다.
value1 value2 value1 ^ value2
0 0 0
0 1 1
1 0 1
1 1 0
let a : UInt8 = 0b0101_1011    // 91 (0101 1011)
let b : UInt8 = 0b0010_0001    // 33 (0010 0001)
let val2 = a ^ b               // 122(0111 1010)

 

  • 비트 왼쪽 시프트 연산자 - Bitwise Left Shift Operator 👉 a << n
    비트를 왼쪽으로 n칸씩 이동시키고, 오른쪽의 빈 비트를 0으로 채운다. signed의 경우 부호 변화에 주의해야 한다. a << n의 값은 a * 2^n^의 값과 같다.
// unsigned int8
let a : UInt8 = 0b0101_1011    // 91 (0101 1011)
let b = a << 1                 // 182(1011 0110)
// signed int8
let c : Int8 = 0b0101_1011     // 91 (0101 1011)
let d = a << 1                 // -74(1011 0110)

 

  • 비트 오른쪽 시프트 연산자 - Bitwise Left Shift Operator 👉 a >> n
    비트를 오른쪽으로 n칸씩 이동시키고, 왼쪽의 빈 비트를 unsigned의 경우 0으로 채우며(논리적 시프트 Logical Shift) signed의 경우 부호 비트로 채운다(양수인 경우 0, 음수인 경우 1 - 산술 시프트 Arithmetic Shift). a >> n의 값은 a / 2^n^의 값과 같다.
// unsigned int8
let a : UInt8 = 0b0101_1011    // 91 (0101 1011)
let b = a >> 1                 // 182(1011 0110)
// signed int8
let c : Int8 = 0b0101_1011     // 91 (0101 1011)
let d = ~c                     // -92(1010 0100)
let e = d >> 1                 // -46(1101 0010)

 

할당 연산자 - Assignment Operators

값을 저장하는 데 사용되는 연산자이다.

할당 연산자 설명 사용 예시
= b의 값을 a에 저장. ==와 헷갈리지 말자. a = b
+= a + b의 값을 a에 저장 a += b
-= a - b의 값을 a에 저장 a -= b
*= a * b의 값을 a에 저장 a *= b
/= a / b의 값을 a에 저장 a == b
%= a % b의 값을 a에 저장 a %= b
&= a & b의 값을 a에 저장 a &= b
|= a | b의 값을 a에 저장 a |= b
<<= a << b의 값을 a에 저장 a <<= b
>>= a >> b의 값을 a에 저장 a >>= b

할당한 값을 리턴하는 Objective-C의 할당문과는 다르게 Swift의 할당문은 어떠한 값도 리턴하지 않는다.

 

범위 연산자 - Range Operators

Swift에서 범위를 표현하는 방식이다.

  • 닫힌 구간 범위 연산자 - Closed range Operator 👉 a...b, a..., ...a
    👉 a...b = [a, b]
    닫힌 구간 범위 연산은 upperBound와 lowerBound의 값을 포함한다. 또한, lowerBound의 값이 upperBound의 값보다 클 수 없다.(10...1 불가능) > 내림차순 범위가 필요하다면 `reversed()` 메소드를 사용하면 된다. ```swift (1...10).reversed() // 10, 9, ..., 2, 1 ```
var sum = 0
for num in 1...10 {
  sum += num
}
// sum = 55

let list = ["A", "B", "C", "D", "E"]
list[2...]  // ["C", "D", "E"]
list[...2]  // ["A", "B", "C"]

 

  • 반 열린 구간 범위 연산자 - Half-Open range Operator 👉 a..<b, ..<a
    👉 a...b = [a, b)
    Python의 `range()`처럼 upperBound는 포함하지만 lowerBound는 포함하지 않는다. 다만 오른쪽 끝의 경계를 꼭 명시해야 한다.
var sum = 0
for num in 1..<10 {
  sum += num
}
// sum = 45

let list = ["A", "B", "C", "D", "E"]
list[..<2]  // ["A", "B"]
저작자표시 (새창열림)

'Development > Swift' 카테고리의 다른 글

[Swift]연산자 메소드 - Operator Method  (0) 2020.07.15
[Swift]Swift가 제공하는 연산자들 - Operators in Swift (1)  (0) 2020.07.15
[Swift]이름 정의 규칙 - Camel Case  (0) 2020.03.03
    'Development/Swift' 카테고리의 다른 글
    • [Swift]연산자 메소드 - Operator Method
    • [Swift]Swift가 제공하는 연산자들 - Operators in Swift (1)
    • [Swift]이름 정의 규칙 - Camel Case
    morijwana
    morijwana
    행복한 휴학생의 devlog

    티스토리툴바