짧은 대답
이진수는 2진수입니다. 모든 숫자(비트)는 0 또는 1이고 각 위치는 2의 거듭제곱을 나타냅니다. 이진수 1010은 십진수 1×8 + 0×4 + 1×2 + 0×1 = 10과 같습니다. 이 계산기는 이진 산술, 비트 논리(AND, OR, XOR, NOT), 비트 이동 및 10진수, 16진수, 8진수로의 즉각적인 변환을 처리합니다.
주요 시사점
- 값은 32비트 부호 있는 정수 범위(-2,147,483,648 ~ 2,147,483,647)로 제한됩니다. 해당 범위를 벗어나는 이진 문자열은 자동으로 잘리지 않고 거부됩니다.
- 비트별 AND/OR/XOR은 숫자를 비트 단위로 비교하며 산술 덧셈이나 곱셈과 동일하지 않습니다. 1010 AND 0110은 16이 아니라 0010과 같습니다.
- n만큼 왼쪽으로 이동하는 것은 2ⁿ를 곱하는 것과 같습니다. n만큼 오른쪽으로 이동하는 것은 2ⁿ로 정수(바닥) 나누기와 동일합니다.
- 각 16진수는 정확히 4개의 이진수 비트에 매핑되므로 16개의 4비트 패턴을 알면 기계적으로 16진수를 이진수로 변환할 수 있습니다.
이진 자리 값이 작동하는 방식
소수점 자리 값이 10의 거듭제곱을 사용하는 것처럼, 2진수 자리 값은 2의 거듭제곱을 사용합니다. 8비트 숫자 10110101을 오른쪽에서 왼쪽으로 읽습니다.
| 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
|---|---|---|---|---|---|---|---|
| 1 | 0 | 1 | 1 | 0 | 1 | 0 | 1 |
1이 있는 위치 값을 더합니다: 128 + 32 + 16 + 4 + 1 = 181. 따라서 이진수 10110101은 십진수 181과 같습니다.
비트 연산과 산술 연산
| 작업 | 기능 | 예 |
|---|---|---|
| AND (&) | 두 비트가 모두 1인 경우에만 1 | 1010 & 0110 = 0010 |
| OR (|) | 1(두 비트 중 하나가 1임) | 1010 | 0110 = 1110 |
| XOR (^) | 1 비트가 다른 경우 | 1010 ^ 0110 = 1100 |
| 왼쪽 시프트(<<) | 비트를 왼쪽으로 이동하고 0으로 채웁니다(×2ⁿ). | 0011 << 2 = 1100 |
| 오른쪽 쉬프트(>>) | 비트를 오른쪽으로 이동(¼2ⁿ, 반내림) | 1100 >> 2 = 0011 |
비트 연산은 개별 비트를 비교하거나 이동합니다. 덧셈처럼 위치 간에 전달되지 않습니다. 이것이 바로 합계와 유사한 항목 대신 1010 AND 0110이 0010에 도달하는 이유입니다.
피해야 할 일반적인 실수
- 비트 AND/OR를 마치 산술 덧셈이나 곱셈인 것처럼 처리합니다. 이는 전달 없이 비트 단위로 작동합니다.
- 32비트 부호 있는 범위 제한을 잊어버리면 — 31개가 넘는 이진 문자열은 지원되는 범위를 오버플로하고 오류를 반환합니다.
- 비트 단위 NOT이 인쇄된 숫자만 뒤집을 것으로 예상합니다. 2의 보수 표현에서 양수를 NOT하면 단순한 숫자 반전이 아니라 음수가 생성됩니다.
- 오른쪽 이동 반올림을 가정하면 음수의 경우 음의 무한대로 잘립니다(바닥). 따라서 3.5 또는 4가 아니라 7 >> 1 = 3입니다.