비트와 바이트? 그리고 이진수와 비트연산자?
비트(Bit)와 바이트(Byte)
비트(Bit)는 컴퓨터에서 정보를 저장하거나 처리하는 가장 작은 단위입니다. 비트는 0 또는 1의 두 가지 값 중 하나를 나타냅니다. 여러 개의 비트를 묶어서 정보를 나타내는데, 이를 바이트(Byte)라고 합니다. 보통 1바이트는 8비트로 구성되어 있습니다.
이진수(Binary)
이진수(Binary)는 0과 1만을 사용하여 숫자를 나타내는 수 체계입니다. 이진수는 컴퓨터에서 데이터를 표현하는 데 주로 사용됩니다. 이진수에서 각 자리는 2의 거듭제곱을 나타내며, 오른쪽에서 왼쪽으로 갈수록 자리가 증가합니다.
예를 들어, 이진수 1011은 1x2^3 + 0x2^2 + 1x2^1 + 1x2^0으로 계산됩니다. 결과적으로 1011은 10진수로는 11이 됩니다.
비트와 이진수는 주로 다음과 같은 분야에서 사용됩니다.
1. 데이터 저장: 컴퓨터 메모리에서 데이터는 비트로 저장되며, 파일이나 데이터베이스에서도 이진수로 표현됩니다.
2. 연산: 컴퓨터는 비트 연산을 사용하여 데이터를 처리하고 계산합니다.
3. 통신: 네트워크에서는 데이터를 이진수로 변환하여 전송하며, 이를 통해 컴퓨터 간에 정보를 주고받습니다.
4. 프로그래밍: 프로그래밍 언어에서는 비트와 이진수를 다양한 연산에 활용하여 프로그램을 작성합니다.
비트 연산자(Bitwise Operators)
는 비트 단위로 연산을 수행하는데, AND(&), OR(|), XOR(^), NOT(~) 등이 있습니다. 이러한 연산자들은 비트 단위로 값을 조작하거나 추출하는 데 사용됩니다.
1. AND 연산자 (&):
- 두 비트가 모두 1이면 결과도 1이 되고, 그 외의 경우에는 0이 됩니다.
- 예시: `1010 & 1100`은 `1000`이 됩니다.
2. OR 연산자 (|):
- 두 비트 중 하나라도 1이면 결과는 1이 되고, 둘 다 0인 경우에만 0이 됩니다.
- 예시: `1010 | 1100`은 `1110`이 됩니다.
3. XOR 연산자 (^):
- 두 비트가 서로 다르면 결과는 1이 되고, 같으면 0이 됩니다.
- 예시: `1010 ^ 1100`은 `0110`이 됩니다.
4. NOT 연산자 (~):
- 비트를 반전시킵니다. 1은 0으로, 0은 1로 바뀝니다.
- 예시: `~1010`은 `...11110011`이 됩니다. (이 예시에서는 32비트 정수를 기준으로 함)
5. 비트 이동 연산자 (<<, >>):
- `<<`는 왼쪽으로 비트를 이동시키는 연산자이며, `>>`는 오른쪽으로 비트를 이동시키는 연산자입니다.
- 이동된 비트는 빈 자리에는 0이 채워집니다.
- 예시: `1010 << 1`은 `10100`이 됩니다.
이러한 비트 연산자는 주로 특정 비트 패턴을 조작하거나 특정 비트의 상태를 확인할 때 사용됩니다. 예를 들어, 특정 비트를 활성화 또는 비활성화하거나, 특정 비트의 값을 확인하여 짝수나 홀수를 판단하는 데 활용될 수 있습니다.
예를 들어, 다음은 비트 연산자를 사용한 간단한 예시입니다:
#include <iostream>
int main() {
// 비트 연산
int a = 5; // 이진수로 0101
int b = 3; // 이진수로 0011
int result_and = a & b; // AND 연산
int result_or = a | b; // OR 연산
int result_xor = a ^ b; // XOR 연산
int result_not_a = ~a; // NOT 연산
std::cout << "AND: " << result_and << std::endl;
std::cout << "OR: " << result_or << std::endl;
std::cout << "XOR: " << result_xor << std::endl;
std::cout << "NOT a: " << result_not_a << std::endl;
return 0;
}
이 코드에서는 비트 연산자를 사용하여 두 정수를 비트 단위로 연산하고, 결과를 출력하고 있습니다.