Bitwise Operators

작성일

비트 연산자

~

 a -> 00100011
~a -> 11011100

실제코드로 확인해보면,

let a: UInt8 = 0b0000_0010 // 2
~a //253
0b1111_1101 //253

&

0을 true 1을 false라 생각하고, 계산하면

00100011
00011010 &
--------
00000010

가 나온다.
자세히 코드로 보면,

let a: UInt8 = 0b0010_0010 // 34
let b: UInt8 = 0b1100_1110 // 206

a & b // 2
0b0000_0010 // 2

|

0을 true 1을 false라 생각하고, 계산하면

00100011
00011010 |
--------
00111011

가 나온다. 자세히 코드로 보면,

let a: UInt8 = 0b0010_0010 // 34
let b: UInt8 = 0b1100_1110 // 206

a | b // 238
0b1110_1110 // 238

^

  • 두 비트가 같으면 0 다르면 1이 된다.

0을 true 1을 false라 생각하고, 계산하면

00100011
00011010 ^
--------
00111001

가 나온다.자세히 코드로 보면,

let a: UInt8 = 0b0010_0010 // 34
let b: UInt8 = 0b1100_1110 // 206

a ^ b // 236
0b1110_1100 // 236

«

  • 모든 비트를 왼쪽으로 옮긴다.

왼쪽으로 밀려나고 밀려난 비트는 사라진다. 그후 0이 추가된다.

00100011
--------
01000110
 a << 1

가 나온다.자세히 코드로 보면,

let a: UInt8 = 0b0010_0010 //34
a << 1
0b0100_0100

a << 2 // 136
a * 4 // 136

»

  • 모든 비트를 오른쪽으로 옮긴다.

오른쪽으로 밀려나고 밀려난 비트는 사라진다. 그후 0이 추가된다.(0이 안되는 경우도 있음)

00100011
--------
00010001
 a >> 1

가 나온다.자세히 코드로 보면,

let a:UInt8 = 0b0010_0010 //34
a >> 1 // 17
a >> 2 // 8