-
[C# 개념] 4.9 비트 연산자Anna belly belly hard/C# 2023. 7. 10. 14:50반응형
- 컴퓨터는 원래 0 과 1의 비트 데이터만 다루는 기계 인데, 지금까지의 데이터 형식을 보면 1바이트 크기의 형식이 가장 작습니다. 비트를 무려 8개나 담을 수 있는 크기의 데이터 형식.
- 지금 까지 본 데이터 형식의 크기도 모두 '바이트' 단위로 이루어져 있다.
- 바이트 단위가 대부분의 데이터를 다루기에 용이한 크기이긴하지만, 어쨋든 비트 수준에서 데이터를 가공해야 하는 경우가 생기는데, 비트 연산자는 이를 위한 연산자.
4.9.1 시프트 연산자
1) Shift Operator
- 비트를 왼쪽이나 오른쪽으로 이동시키는 연산
2) 왼쪽 시프트 연산
3) 오른쪽 시프트 연산
4) 음수에 대한 오른쪽 시프트 연산
5) 시프트 연산자의 사용법
- 시프트 연산자는 산술 연산자 처럼 피연산자 두개를 받는다.
- 왼쪽 피 연산자는 왼본데이터, 오른쪽 피 연산자는 옮길 비트의 수입니다.
6) 시프트 연산의 의미
- 240(0000 0000 1111 0000) 을 왼쪽으로 2비트 시프트한 결과는 960 (0000 0011 1100 0000)
- 오른쪽으로 2비트 시프트한 결과는 60
- 원본 데이터를 a , 옮긴 비트 수를 b 라고 할때,
왼쪽 시프트 연산을 하면 a x 2b ,
오른쪽 시프트 연산을 하면 a : 2b
- 이 점을 이용해서 시프트 연산은 고속의 곱셈과 나눗셈을 구현하는 데 사용하기도 하고,
- & 연산자, | 연산자와 함께 byte 처럼 작은 단위로 쪼개진 데이터를 다시 하나의 int 나 long 형식으로 재조립 하는 데 사용
using System; namespace ShiftOperator { class MainApp { static void Main(string[] args) { Console.WriteLine("Testing <<..."); int a = 1; /* 1바이트(8비트)로 나타낼수 있는 수는 256가지 입니다. 따라서 8자리의 16진수면 int 형식이 표현하는 모든수를 나타낼수 있습니다. */ Console.WriteLine("a :{0:D5} (0X{0:x8})", a); Console.WriteLine("a << 1:{0:D5} (0X{0:x8})", a << 1); Console.WriteLine("a << 2:{0:D5} (0X{0:x8})", a << 2); Console.WriteLine("a << 5:{0:D5} (0X{0:x8})", a << 5); Console.WriteLine("\nTesting >>..."); int b = 255; Console.WriteLine("b :{0:D5} (0X{0:x8})", b); Console.WriteLine("b >> 1:{0:D5} (0X{0:x8})", b >> 1); Console.WriteLine("b >> 2:{0:D5} (0X{0:x8})", b >> 2); Console.WriteLine("b >> 5:{0:D5} (0X{0:x8})", b >> 5); Console.WriteLine("\nTesting >>> 2..."); int c = -255; Console.WriteLine("c :{0:D5} (0X{0:x8})", c); Console.WriteLine("c >> 1:{0:D5} (0X{0:x8})", c >> 1); Console.WriteLine("c >> 2:{0:D5} (0X{0:x8})", c >> 2); Console.WriteLine("c >> 5:{0:D5} (0X{0:x8})", c >> 5); } } }
4.9.2 비트 논리 연산자
- 논리 연산 : 참 또는 거짓의 진릿값을 피연산자로 하는 연산
- 비트 논리 연산 : 데이터의 각 비트에 대해 수행하는 논리 연산
- 비트 논리 연산자는 bool 형식 외에 정수 계열 형식의 피연산자에 대해서도 사용할 수 있다.
- 우리가 사용하는 데이터가 0 과 1로 이루어져 있다는 사실
- int 형식 데이터는 4바이트, 즉 32개의 비트로 이루어짐
- long 형식 데이터는 8바이트, 즉 64개의 비트로 이루어짐
- 비트 논리 연산은 이 비트 덩어리를 이루고 있는 각 비트에 대해 1 은 참, 0 은 거짓으로 해서 논리 연산을 하는 것
using System; namespace BitwiseOperator { class MainApp { static void Main(string[] args) { int a = 9; int b = 10; Console.WriteLine($"{a} & {b} : {a&b}"); Console.WriteLine($"{a} | {b} : {a | b}"); Console.WriteLine($"{a} ^ {b} : {a ^ b}"); int c = 255; Console.WriteLine("~{0}(0x{0:X8}) :{1}(0x{1:X8}) ", c,~c); } } }
반응형'Anna belly belly hard > C#' 카테고리의 다른 글
[C# 개념] 4.11 null 병합 연산자 (0) 2023.07.10 [C# 개념] 4.10 할당 연산자 (0) 2023.07.10 [C# 개념] 4.8 null 조건부 연산자 (0) 2023.06.30 [C# 개념] 4.7 조건 연산자 (0) 2023.06.30 [C# 개념] 4.6 논리 연산자 (0) 2023.06.30