값 하나를 16진수·10진수·8진수·2진수로 동시에 보여주고, 비트를 직접 눌러 바꾸거나 시프트·회전·비트 범위 논리연산을 적용하는 계산기입니다. 2진수는 4비트씩 묶어 표시하고 묶음마다 대응하는 16진수 자리를 함께 적습니다.
아무 칸에나 입력하면 나머지가 즉시 바뀝니다. 0x 0b 0o 접두사와 _ 구분자를 받습니다.
비트를 누르면 0과 1이 바뀝니다. 묶음 아래 파란 글자가 그 4비트의 16진수 값입니다.
시프트와 회전
폭을 벗어난 비트는 버려집니다. 산술 오른쪽 시프트는 최상위 비트(부호)를 채워 넣습니다.
비트 범위 연산
접두사로 진법을 정합니다. 없으면 10진수
이 계산기를 읽는 법
4비트 묶음이 16진수 한 자리다
2진수를 네 자리씩 끊는 이유는 4비트가 정확히 16진수 한 자리이기 때문입니다. 1111은 F, 1010은 A입니다. 그래서 2진수를 눈으로 16진수로 옮길 때는 네 자리씩 끊어 읽으면 됩니다. 이 계산기가 묶음마다 16진수를 적어 두는 것도 그 대응을 눈에 익히기 위해서입니다.
부호 있음과 부호 없음은 저장된 비트가 아니라 해석의 문제다
비트 자체에는 부호가 없습니다. 0xFF라는 8비트 값을 부호 없음으로 읽으면 255, 부호 있음으로 읽으면 −1입니다. 저장된 비트는 똑같습니다. 위에서 해석을 바꿔 보면 16진수·2진수는 그대로인데 10진수만 달라지는 것을 볼 수 있습니다.
부호 있는 표현은 2의 보수를 씁니다. 최상위 비트가 1이면 음수이고, 그 값은 −2^(n−1) + 나머지 비트입니다. 이 방식이 널리 쓰이는 이유는 뺄셈을 따로 만들지 않고 덧셈 회로 하나로 처리할 수 있기 때문입니다.
논리 오른쪽 시프트와 산술 오른쪽 시프트
왼쪽 시프트는 한 종류지만 오른쪽은 둘로 갈립니다.
- 논리(logical)는 빈 자리를 항상 0으로 채웁니다. 부호 없는 값을 2로 나눌 때 쓰입니다.
- 산술(arithmetic)은 빈 자리를 최상위 비트로 채웁니다. 음수를 음수로 유지한 채 2로 나눕니다.
8비트 0xF8(부호 있음으로 −8)을 두 칸 오른쪽으로 밀면, 논리는 0x3E(62)가 되고 산술은 0xFE(−2)가 됩니다. 부호를 지켜야 하는 자리에 논리 시프트를 쓰면 값이 통째로 뒤집힙니다. C에서 int와 unsigned 중 어느 쪽으로 선언했는지가 곧바로 결과를 가르는 지점입니다.
엔디안 변환 — 같은 값인데 메모리에 담긴 순서가 다르다
위 메모리 바이트 배치 상자는 현재 값을 두 가지 순서로 함께 보여줍니다. 32비트 0x12345678이면 빅엔디안은 12 34 56 78, 리틀엔디안은 78 56 34 12입니다. 왼쪽이 낮은 주소입니다.
이것이 빅엔디안과 리틀엔디안의 차이입니다. 같은 수를 메모리에 저장할 때 어느 쪽 바이트를 낮은 주소에 두느냐의 문제입니다.
- 빅엔디안은 큰 자리(MSB)를 낮은 주소에 둡니다. 사람이 숫자를 적는 순서와 같아 덤프를 읽기 편합니다. 네트워크 프로토콜의 표준 바이트 순서라 네트워크 바이트 오더라고도 부릅니다.
- 리틀엔디안은 작은 자리(LSB)를 낮은 주소에 둡니다. x86과 대부분의 ARM 설정이 이쪽입니다.
값 자체는 달라지지 않습니다. 달라지는 것은 메모리에 늘어놓는 순서뿐입니다. 그래서 같은 기계 안에서는 문제가 없다가, 다른 엔디안의 기계와 데이터를 주고받거나 바이너리 파일을 옮길 때 숫자가 뒤집혀 나타납니다.
“지금 무슨 엔디안인가”에 답이 없는 이유
이 계산기는 현재 엔디안을 표시하지 않습니다. 표시할 수 없기 때문입니다. 엔디안은 값의 성질이 아니라 그 값을 메모리에 늘어놓는 방식이라, 값 하나만 놓고는 어느 쪽인지 정해지지 않습니다. 0x12345678이라는 숫자 자체에는 엔디안이 없습니다.
그래서 두 가지를 나눠 보여줍니다. 배치는 양쪽을 늘 함께 적습니다. 이건 언제나 참입니다. 그리고 뒤집기 버튼을 눌렀는지 아닌지만 상태로 표시합니다. 여러 번 누르다 길을 잃는 건 바로 이 정보라서, 뒤집은 상태에서는 배지가 붙고 뒤집기 전 값도 함께 적어 둡니다.
값을 새로 입력하거나 비트를 누르거나 시프트를 걸면 이 상태는 초기화됩니다. 그 시점부터는 뒤집힌 값인지 아닌지가 의미를 잃기 때문입니다.
비트 범위 연산은 레지스터 필드를 다루는 방식이다
하드웨어 레지스터는 보통 한 워드 안에 여러 필드가 나뉘어 들어갑니다. [7:4]가 모드, [3:0]이 카운트인 식입니다. 특정 필드만 바꾸려면 나머지 비트를 건드리지 않아야 하므로, 마스크를 만들어 지우고 새 값을 끼워 넣습니다.
위 값 넣기 버튼이 정확히 이 세 번째 식을 수행합니다. 범위를 지정하면 그 아래에 현재 필드 값과 마스크가 함께 표시되므로, 데이터시트의 비트 배치를 그대로 옮겨 놓고 확인할 수 있습니다.
이 계산기가 다루지 않는 것
| 항목 | 설명 |
|---|---|
| 64비트 초과 | 128비트 이상은 지원하지 않습니다 |
| 부동소수점 | 실수의 비트 표현은 별도 도구를 쓰세요 |
| 산술 연산 | 덧셈·곱셈·나눗셈은 넣지 않았습니다. 비트 조작에 집중한 도구입니다 |
| 오버플로 플래그 | 캐리·오버플로 같은 상태 비트는 계산하지 않습니다 |
모든 계산은 브라우저 안에서만 이루어지며 입력한 값은 어디에도 전송되거나 저장되지 않습니다.