(2022) 공부 (Study)/게임 개발 (Development)

2진수 그리고 16진수에 대한 정리

수낭 2022. 4. 16. 12:19

 

포스팅을 읽기 전에 참고하면 좋은 자료.

https://docs.microsoft.com/ko-kr/windows/win32/learnwin32/windows-coding-conventions

 

Windows 코딩 규칙 - Win32 apps

Windows 프로그래밍을 처음 접하는 경우 Windows 프로그램을 처음 볼 때 이 프로그래밍이 방해가 될 수 있습니다.

docs.microsoft.com

 

 

[Graph of Decimal - Hexadecimal - Binary]

d hex bin d hex bin d hex bin
0 0x00 0000 0000 64 0x40 0100 0000 128 0x80 1000 0000
1 0x01 0000 0001 65 0x41 0100 0001 129 0x81 1000 0001
2 0x02 0000 0010 66 0x42 0100 0010 130 0x82 1000 0010
3 0x03 0000 0011 67 0x43 0100 0011 131 0x83 1000 0011
4 0x04 0000 0100 68 0x44 0100 0100 132 0x84 1000 0100
5 0x05 0000 0101 69 0x45 0100 0101 133 0x85 1000 0101
6 0x06 0000 0110 70 0x46 0100 0110 134 0x86 1000 0110
7 0x07 0000 0111 71 0x47 0100 0111 135 0x87 1000 0111
8 0x08 0000 1000 72 0x48 0100 1000 136 0x88 1000 1000
9 0x09 0000 1001 73 0x49 0100 1001 137 0x89 1000 1001
10 0x0A 0000 1010 74 0x4A 0100 1010 138 0x8A 1000 1010
11 0x0B 0000 1011 75 0x4B 0100 1011 139 0x8B 1000 1011
12 0x0C 0000 1100 76 0x4C 0100 1100 140 0x8C 1000 1100

137 = 0x89 = 1000 1001이고, 1000 = 8, 1001 = 9이다. (분리해서 생각하면 편하다.)
즉, 16진수는 숫자 하나가 4bits를 차지하고, 16진수 두 자리가 1byte가 된다.

70000(10)의 16진수 변환

70000 = 0x11170 = 0000 0000 0000 0001   0001 0001 0111 0000 b 이다.
이를 좀 더 편하게 보려면, 16진수의 각 자릿수를 2진수로 바꿔서 이어붙여보면 된다.
16진수는 0-15, 즉 16가지의 조합이 가능한 자릿수들을 갖고,
16가지의 조합을 위해서는 2^4 = 16이므로, 4bits가 필요하다.
그래서 16진수의 각 자릿수는 4bits로 분해 및 치환해서 살펴보면 가시적으로 좋은 것이다.

0x11170
=> 1 1 1 7 0
=> 0001 0001 0001 0110 0000
이러한 형태가 된다.

 

[WORD 체계]

1BYTE = 8bits = (2^8) = (255가지 표현 가능)
1WORD = 2BYTE = 16bits = (2^16) = (65,535가지 표현 가능)
1DWORD = 2WORD = 4BYTE = 32bits = (2^32) = (4,294,967,296가지 표현 가능) = (약 43억)
1QWORD = 2DWORD = 4WORD = 8BYTE = 64bits = (2^64) = (1.844674407370955e+19가지 표현 가능)
(1.844674407370955e+19 = 9.223372036854776e+18 * 2이다.)
(9.223372036854776e+18는, 9,223,372,036,854,775,808, 즉, 약 922경이다.)

 

[Power of Two]

2의 제곱수들을 16진수로 표현한 것은 다소 낯설 수 있다.
16진수의 앞자리가 1, 2, 4, 8규칙적으로 변하는 것을 미리 봐두어서 기억해놓자.

제곱꼴 2진수 16진수 IEC
2^0 1 0000 0000 0000 0000   0000 0000 0000 0001 1 1
2^1 2 0000 0000 0000 0000   0000 0000 0000 0010 2 10
2^2 4 0000 0000 0000 0000   0000 0000 0000 0100 4 100
2^3 8 0000 0000 0000 0000   0000 0000 0000 1000 8 1Ki
2^4 16 0000 0000 0000 0000   0000 0000 0001 0000 10 10Ki
2^5 32 0000 0000 0000 0000   0000 0000 0010 0000 20 100Ki
2^6 64 0000 0000 0000 0000   0000 0000 0100 0000 40 1Mi
2^7 128 0000 0000 0000 0000   0000 0000 1000 0000 80 10Mi
2^8 256 0000 0000 0000 0000   0000 0001 0000 0000 100 100Mi
2^9 512 0000 0000 0000 0000   0000 0010 0000 0000 200 1Gi
2^10 1024 0000 0000 0000 0000   0000 0100 0000 0000 400 10Gi
2^11 2048 0000 0000 0000 0000   0000 1000 0000 0000 800 100Gi
2^12 4096 0000 0000 0000 0000   0001 0000 0000 0000 1000 1Ti
2^13 8192 0000 0000 0000 0000   0010 0000 0000 0000 2000 10Ti
2^14 16384 0000 0000 0000 0000   0100 0000 0000 0000 4000 100Ti
2^15 32768 0000 0000 0000 0000   1000 0000 0000 0000 8000 1Pi
2^16 65536 0000 0000 0000 0001   0000 0000 0000 0000 10000 10Pi

https://zetawiki.com/wiki/2%EC%9D%98_%EA%B1%B0%EB%93%AD%EC%A0%9C%EA%B3%B1

 

2의 거듭제곱 - 제타위키

다음 문자열 포함...

zetawiki.com

 

[Size of  Data Type]

구분 자료형 크기 범위
기본형 void
문자형 (signed) char 1 byte -128 ~ 127
unsigned char 1 byte 0 ~ 255
wchar_t 2 byte 0 ~ 65,535
정수형 bool 1 byte 0 ~ 1
(signed) short (int) 2 byte -32,768 ~ 32,767
unsigned short (int) 4 byte 0 ~ 65,535
(signed) int 4 byte -2,147,483,648 ~ 2,147,483,647
unsigned int 4 byte 0 ~ 4,294,967,295
(signed) long (int) 4 byte -2,147,483,648 ~ 2,147,483,647
unsigned long (int) 4 byte 0 ~ 4,294,967,295
__int8 1 byte -128 ~ 127
__int16 2 byte -32,768 ~ 32,767
__int32 4 byte -2,147,483,648 ~ 2,147,483,647
__int64 8 byte -9,223,372,036,854,775,808
~ 9,223,372,036,854,775,807
실수형 float 4 byte 3.4E-38(-3.4*10^38)
~ 3.4E+38(3.4*10^38) (7digits)
(long) double 8 byte 1.79E-308(-1.79*10^308)
~ 1.79E+308(1.79*10^308) (15digits)

 

https://myblog.opendocs.co.kr/archives/1230

 

[C++ 정리] 자료형의 크기 및 범위 | Opendocs

__int64 8 byte -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807

myblog.opendocs.co.kr

 

https://dojang.io/mod/page/view.php?id=174 

 

C 언어 코딩 도장: 23.3 시프트 연산자 사용하기

C 언어에서 비트의 논리 연산뿐만 아니라 각 자리를 이동시킬 수도 있습니다. 이번에는 비트의 자리를 이동시켜 보겠습니다. bitwise_shift_operator.c #include int main() { unsigned char num1 = 3; // 3: 0000 0011 uns

dojang.io