15. 비트 연산자

ChoiJyun·2023년 10월 24일
post-thumbnail

📌 비트 연산자

비트에 대한 연산을 하는 연산자로 이진수에 대한 데이터를 연산처리합니다.

📖 AND ( & )

두개의 비트가 1인경우 1,
그 외에는 0을 반환한다.

sbyte byteNum1 = 0b_0000_1111;
sbyte byteNum2 = 0b_0000_0011;

Console.WriteLine($"byteNum1 & byteNum2: {byteNum1 & byteNum2}");
[출력]
byteNum1 & byteNum2: 3

출력값을 분석해보자.

0000 1111
0000 0011
ㅡㅡㅡㅡㅡㅡ( & )
0000 0011 = 3

따라서 3의 값을 반환한다.

📖 OR ( | )

둘 중 하나의 비트가 1인 경우 1,
그 외에는 0을 반환한다.

sbyte byteNum1 = 0b_0000_1111;
sbyte byteNum2 = 0b_0000_0011;

Console.WriteLine($"byteNum1 | byteNum2: {byteNum1 | byteNum2}");
[출력]
byteNum1 | byteNum2: 15

출력값을 분석해보자.

0000 1111
0000 0011
ㅡㅡㅡㅡㅡㅡ( | )
0000 1111 = 15

따라서 15의 값을 반환한다.

📖 NOT ( ! )

비트값을 반전시킨다.
비트값이 1인경우 0,
비트값이 0인경우 1을 반환한다.

sbyte byteNum = 0b_0000_1111;

Console.WriteLine($"~byteNum : {~byteNum}");
Console.WriteLine($"{Convert.ToString(~byteNum, 2)}");
[출력]
~byteNum : -16
11111111111111111111111111110000

출력값을 분석해보자.

0000 0000 0000 0000 0000 0000 0000 1111
ㅡㅡㅡㅡㅡㅡ( ~ )
1111 1111 1111 1111 1111 1111 1111 0000 = -16

따라서 -16의 값을 반환한다.

📖 XOR ( ^ )

두 개의 비트값이 같은 경우 0,
두 개의 비트값이 다른 경우 1을 반환한다.

sbyte byteNum1 = 0b_0000_1111;
sbyte byteNum2 = 0b_0000_0011;

Console.WriteLine($"byteNum1 ^ byteNum2: {byteNum1 ^ byteNum2}");
[출력]
byteNum1 ^ byteNum2: 12

출력값을 분석해보자.

0000 1111
0000 0011
ㅡㅡㅡㅡㅡㅡ( ^ )
0000 1100 = 12

따라서 12의 값을 반환한다.

📖 쉬프트 연산자 ( >>, << )

비트를 이동시키는 연산자이다.

uint uintNum = 0x01;

Console.WriteLine($"{Convert.ToString(uintNum, 2)}");

Console.WriteLine($"\n비트 왼쪽으로 한칸 이동 : {uintNum << 1}");
Console.WriteLine($"{Convert.ToString(uintNum << 1, 2)}");

Console.WriteLine($"\n비트 왼쪽으로 두칸 이동 : {uintNum << 2}");
Console.WriteLine($"{Convert.ToString(uintNum << 2, 2)}");

Console.WriteLine($"\n비트 왼쪽으로 세칸 이동 : {uintNum << 3}");
Console.WriteLine($"{Convert.ToString(uintNum << 3, 2)}");
[출력]
1

비트 왼쪽으로 한칸 이동 : 2
10

비트 왼쪽으로 두칸 이동 : 4
100

비트 왼쪽으로 세칸 이동 : 8
1000

출력값을 분석해보자.

1. 한칸 이동 : 
0000 0001
ㅡㅡㅡㅡㅡㅡ( << 1 )
0000 0010 = 2
2. 두칸 이동 : 
0000 0001
ㅡㅡㅡㅡㅡㅡ( << 2 )
0000 0100 = 4
3. 세칸 이동 : 
0000 0001
ㅡㅡㅡㅡㅡㅡ( << 3 )
0000 1000 = 8
profile
개발자 도전기

0개의 댓글