Language/Swift

Swift - 고급() 연산자

codinglearn 2020. 7. 7. 18:03
반응형

고급(비트) 연산자를 이해하기에 앞서  먼저 Int, UInt를 선행 학습하시기를 권장해 드립니다.

 

정수값을 저장하기 위해 사용되는 변수 타입 : Int & UIint 

Int -> -, + 부호 모두 저장 가능한 변수 타입

UInt -> + (양)의 부호만 저장 가능한 변수 타입

 

자 여기에서 Int8, UInt8 ...Int64, Int64 이렇게 뒤에 Int[숫자]가 들어가는데

이건 변수에 저장가능한 용량!?을 표현하는거에요.

8비트, 16비트, 32비트, 64비트 이렇게요.

비트가 적을 수록 저장할 수 있는 용량이 작아 지겠조? 

 

#아래와 같이 저장 사이즈가 차이가 있습니다.

Int8 -> -128 ~ 127  .... Int64 -> 0 ~ 18446744073709551615

UInt8 -> 0 ~ 255 ..... UInt64 -> -9223372036854775808 ~ 9223372036854775807

 

자 상세한 내용은 스위프트 공식 가이드 문서 또는 XCode에서 확인해주세요.

print("Int8 = \(Int8.min) ~ \(Int8.max)")
print("Int64 = \(Int64.min) ~ \(Int64.max)")
print("Unt8 = \(UInt8.min) ~ \(UInt8.max)")
print("Unt64 = \(UInt64.min) ~ \(UInt64.max)")

 

고급(비트) 연산자에 대한 상세한 설명은 링크를 참조 드릴게요.

저도 아직 공부중이라 정확한 내용이 아닐 수 있으니 참고만 부탁드려요.

 

 

비트연산은 2진수로 연산이 가능합니다.

ex ) int = 1 -> 0b00000001  

 

비트 연산자 NOT (Bitwise NOT Operator) - [ ~ ]

여집합!! 

2진수로 initialBits의 값이 0000 1111 일 경우

-> ~initialBits진행하면 값은 1111 0000으로 변환이 됩니다. 

let initialBits: UInt8 = 0b00001111
let invertedBits = ~initialBits  // equals 11110000

print("~initialBits : \(String(invertedBits, radix: 2))")

 

비트 연산자 AND (Bitwise AND Operator) - [ & ]

교집합!!

 

1111 1100 & 0011 1111 이렇게 두값을 연산하면 

 

    1 1 1 1  1 1 0 0

    001 1  1 1 1  1

-> 0011 1100 으로 값이 변환 됩니다. 

let firstSixBits: UInt8 = 0b11111100
let lastSixBits: UInt8  = 0b00111111
let middleFourBits: UInt8 = firstSixBits & lastSixBits  // equals 00111100

print("firstSixBits & lastSixBits : \(String(middleFourBits, radix: 2))")

 

비트 연산자 OR (Bitwise OR Operator) - [ | ]

합집합!!

 

네 두값을 비교하였을 경우 1의 값이 하나라도 위치한다면 반환되는 값은 1로 반환이 됩니다.

let someBits: UInt8 = 0b10110010
let moreBits: UInt8 = 0b01011110
let combinedbits = someBits | moreBits // equals 11111110

print("someBits | moreBits : \(String(combinedbits, radix: 2))")

 

비트 연산자 XOR (Bitwise XOR Operator) - [ ^ ]

합집합 - 교집합

 

이 연산자는 위의 or연산자를 진행하고 반환되는 값에 반대의 값이 반환됩니다.

let firstBits: UInt8 = 0b00010100
let otherBits: UInt8 = 0b00000101
let outputBits = firstBits ^ otherBits  // equals 00010001

print("firstBits ^ otherBits : \(String(outputBits, radix: 2))")

 

비트 시프트 연산자 (Bitwise Left and Right Shift Operators) - [ >> ] 

비트 단위 이동

0000 0001 << 1

--> 0000 0010)

 

이값은 비트단위의 값을 >>1 이렇게 진행하면 화살표 방향으로 숫자를 이동시키며 이동시켰을경우

그 반대방향의 끝 값은 0으로 값이 변경됩니다.

 

또한 >> 16 등을 사용하면 형변환도 됩니다.

let shiftBits: UInt8 = 4   // 00000100 in binary
shiftBits << 1             // 00001000
shiftBits << 2             // 00010000
shiftBits << 5             // 10000000
shiftBits << 6             // 00000000
shiftBits >> 2             // 00000001


let pink: UInt32 = 0xCC6699
let redComponent = (pink & 0xFF0000) >> 16    // redComponent is 0xCC, or 204
let greenComponent = (pink & 0x00FF00) >> 8   // greenComponent is 0x66, or 102
let blueComponent = pink & 0x0000FF           // blueComponent is 0x99, or 153

 

 

 

 

 

 

 

반응형