이진수와 16진수
이 포스트는 CS에서 많이 쓰는 이진수와 16진수에 대해 설명한다.
Unsigned Binary Integers
만약 n-bit number이라면 0부터 \(2^n-1\)까지 표현이 가능하다.
2s-Complement Signed Integers
만약 n-bit number이라면 \(-2^{n-1}\)부터 \(2^{n-1}-1\)까지 표현 가능하다.
총 64bit라고 하자. 그럼 (오른쪽 기준)bit 63은 sign bit가 된다. 1이면 음수, 0이면 non-negative.
변환법:
- 양수 모든 bit 뒤집기 + 1
- 0: 0000 0000 … 0000
- -1: 1111 1111 … 1111
- 가장 작은 수: 1000 0000 … 0000 : \(-2^{n-1}\)
- 가장 큰 수: 0111 1111 … 1111 : \(2^{n-1}-1\)
Sign Extension
계산을 위해 8-bit 수를 16-bit 수로 늘려서 계산해야할 때가 있다. 그럴 때는 부호와 크기를 동일하게 가져가능 방식으로 bit수를 늘려야한다. 이때 sign bit를 왼쪽으로 쭉 늘리면 된다.
- +2: 0000 0010 => 0000 0000 0000 0010
- -2: 1111 1110 => 1111 1111 1111 1110
Hexadecimal
컴퓨터에서 2진수를 쓰지만 2진수는 너무 길어지기 때문에 실제로는 16진수도 많이쓴다(사람들끼리 편의를 위해)
0 | 0000 | 4 | 0100 | 8 | 1000 | c | 1100 |
1 | 0001 | 5 | 0101 | 9 | 1001 | d | 1101 |
2 | 0010 | 6 | 0110 | a | 1010 | e | 1110 |
3 | 0011 | 7 | 0111 | b | 1011 | f | 1111 |
ex) eca8 6420 = 1110 1100 1010 1000 0110 0100 0010 0000
This post is licensed under CC BY 4.0 by the author.