
정보처리기사 진법 변환을 공부하다 문득 든생각
애초에 뭔 진법이 이렇게 많냐 이거 왜쓰는거야?
10진수
우리의 손가락을 열개다
그 덕분에 우리는 숫자를 0부터 9까지 쉽게 셀 수 있다
이게 우리가 십진수를 쓰게 된 유래다
2진수
컴퓨터는 0과1로만 이루어져있다
는 사실을 알고는 있지만 컴퓨터로 0123456789 텍스트를 치면 다 나오는데
근본적으로 0과 1로 변환되어야 할 이유는 무엇일까
컴퓨터가 데이터를 보는 방법이 그 이유다
컴퓨터는 전압을 올리거나 내리는 방식으로 데이터를 표현한다
전압이 있을 때는 1, 없을 때는 0으로 표시하는 방식이 가장 간단하고 안정적이다
이렇게 그래프 상으로는 전류가 끊긴 것 같지만
사실은 이런식으로 되어있는 형태이다
그리고 각각의 자릿수를 Bit 비트 라고 한다
즉, 1 bit 로 표현할 수 있는것은 참, 거짓 딱 두가지이다
여기서 2비트로 늘리면 표현할수 있는 가지수는 2의 2승으로 4가지로 늘어난다 (0부터 3)
4비트는 2의 4승으로 16가지의 표현이 가능하다 (0부터 15)
8비트는 2의 8승으로 256가지의 표현이 가능하다 (0부터 255)
컴퓨터는 이 8비트를 데이터가 저장되는 최소 단위로 삼기로 했다
4개로 나뉘어진 비트의 단위를 Nibble이라하며, 앞4비트와 뒤4비트가 합쳐진 8비트를 1Byte 라고 한다
1 byte = 8bits
= 2nibble ( 4bits : 4bits)
= 2 ^ 8 = 256 (0~255)
16진수
앞서 4비트는 16가지의 표현이 가능하다 했다
기존의 10진수로는 0부터 9까지 한자리수로 표현이 가능한데, 10이상의 숫자까지 한자리로 표현할 수가 없었다. 여기서 16진수가 등장한다
10이상의 숫자가 나오면 10 = a, 11 = b, 12 = c, 13 = d, 14 = e, 15 = f 이렇게 알파벳으로 표현하게 되었다
예를 들어, 10진수 255는 2진수로 11111111, 16진수로는 FF로 표현된다
왜 굳이 다양한 진법을 사용할까?
16진수를 사용하면 큰 수를 더 간결하고 알아보기 쉽게 표현할 수 있기 때문에 메모리 주소, 색상 코드, 파일 형식 등에서 자주 사용된다
2진수는 컴퓨터 내부에서 데이터를 처리하는 데 필수적이지만, 사람이 직접 읽고 쓰기에는 불편하다
그래서 8진수나 16진수처럼 더 큰 단위를 사용해 데이터를 간단히 표현할 수 있다
특히 16진수는 4비트 단위를 깔끔하게 나눌 수 있어 데이터의 경계를 명확히 볼 수 있다
8bits = 1 byte : C언어로 char
16bits = 2 byte : C언어로 short int
32bits = 4 byte : C언어로 int
64bits = 8 byte : C언어로 long int
더 큰 단위 또한 있다
1 byte
1000 byte = 1 Kbyte (10^3)
1000 Kyte = 1 Mbyte (10^6)
1000 Myte = 1 Gbyte (10^9)
1000 Gyte = 1 Tbyte (10^12)
8진수
8진수는 2진수보다 더 짧고 간결하게 데이터를 표현할 수 있는 방법이다
예를 들어, 3비트는 0부터 7까지 8개의 값을 표현할 수 있다
8진수는 예전 컴퓨터 시스템에서 메모리나 데이터 표현을 단순화하기 위해 자주 사용되었다
정리하자면 진법이 다양한 이유는 결국 컴퓨터의 효율성과 사람의 편의성을 동시에 만족시키기 위해서라고 볼 수 있겠다
참고 자료
'궁금한게 많은 백구스 > CS' 카테고리의 다른 글
[CS50/C언어] VSCode에서 CS50 라이브러리 사용하기 (0) | 2023.02.16 |
---|---|
[CS50/C언어] C언어에서 1 나누기 10 의 소수점 값이 다른 이유, 정수 오버플로우 오류 (0) | 2023.02.15 |
[CS50] 모두를 위한 컴퓨터 과학 CS50 데이비드 J. 말란 (David J. Malan) (1) | 2023.02.02 |
[CS] 비전공자의 부족한 CS지식을 채워줄 무료 대학 강의 사이트 모음 (0) | 2023.01.19 |