C language(c언어)

Number and Digit (수와 숫자) 십진법,이진법,16진법

computerchild 2023. 9. 1. 15:29
728x90
반응형

저는 컴퓨터 과학을 처음 접하면서(문과 출신임) 제일 짜증 나고 낯설었던 것이 바로 어쩔 수 없이 접하게 되는 수학적 지식입니다. 너무 오래전에 수학이란 것을 배운 이후 다시 공부하려니 너무 힘들더라고요. 저와 같은 분들이 많으시리라 생각합니다(제발) 이번 자료가 많은 도움이 되기를 바랍니다.

 

Number와 Digit의 차이는 수는 어떠한 물질의 양을 나타내는 단위이고, 숫자는 이를 기록할 수 있도록 시각화 한 것이다.

예를 들어 사과 100개가 있다면 이를 100개 그리는 거보다 '사과 100개'라 표현하는 것이 훨씬 간단하겠죠. 물론 100을 표현하는 방법은 이외에도 많습니다. 0과 1로도 표현할 수 있지요(이진수) 이렇게 수를 표현하는 방법을 기수법(Numeral system)이라 합니다.

 

밑과 지수

수학은 '복잡한 것을 단순히'(더 복잡한데...) 라는 목적 하에 발전했다고 합니다. figure.1처럼 2를 100번 곱한다고 생각해 봅시다. 2를 100번 적는 거는 너무나도 막일스럽습니다(인간은 이러면 안 됩니다.)  그래서 똑똑한 수학작들은 figure.2처럼 단순하게 표현하는 방법을 알려주었습니다.

figure.1
figure.2

정말 훌륭합니다. 이때 2를 밑(base) 100을 지수(exponent)라고 부른다. 이 지수에서 가장 중요한 사실은 바로 figure.3입니다.

figure.3

Number에는 어떠한 수도 들어갈 수 있다(0 제외) 근데 0을 곱했는데 어떻게 값이 1이 될 수 있냐라는 의문이 생길 수 있습니다(어이가 없네) 하지만 수학자들이 바보가 아니듯이 이 값은 정의한 값이라 생각하면 됩니다. 만일 이 값을 1이라 하지 않으면 여러 지수 관련 법칙들이 성립되지 않기 때문입니다. 즉 어떤 수의 0승 한 것이 1이라는 것은 다른 법칙의 기본이라고 생각하시면 됩니다.

 

십진법, 이진법,16진법

일반적으로 우리는 사회에서 십진법을 사용합니다. 아마도 인간이 10개의 손꾸락을 가졌기 때문에 십진법을 주료 사용하지 않았나 라는 생각이 듭니다(저자님이 그러셨음)

253 = 2*10^2 + 5*10^1 + 3*10^0     =  253 = 200+50+3입니다. 십진법은 자릿수가 하나 증가할 때마다 이 자리를 나타내는 숫자에 10이 곱해지게 되는 것입니다.

 

이를 통해 이진법을 생각해 봅시다. 컴퓨터는 아쉽게도 0과 1인 두 종류의 숫자 밖에 표현할 수 없습니다(전기적 신호 때문이라고 합니다) 253을 컴퓨터는 어떻게 받아들일까요? 0과 1만으로 253을 표현할 수 있습니다. 이를 이진법(Binary)라고 합니다. 예를 들어 6을 이진수로 나타내면 아래와 같습니다.

6 = 4+2=1+*2^1+0*2^0=110(2)

십진법에선 한 자리 늘어날 때마다 10이 곱해지고, 이진법에선 한 자리 늘어날 때마다 2가 곱해진다는 것을 아시겠습니까?(몰라도 계속 보면 알 수 있습니다) 즉 가장 오른쪽은 1, 그다음은 1에 2를 곱했으므로 2, 그 다음은 2에 2를 곱하므로 4의 자리가 됩니다. 

 

십진법 이진법의 기본은 이 정도만 알고 십진수에서 이진수로 convert 하는 방법을 알아보도록 하겠습니다(사실 이게 제일 중요합니다)

figure.4
figure.5

figure.4처럼 자릿수가 하나 올라갈 때마다 그 자릿수의 값이 2배로 된다는 사실만을 기억하면 됩니다. 자 과연 어떻게 십진수를 이진수로 바꿀까요? figure.5를 봅시다. 매번 2로 나누고 나머지를 뒤에 적습니다. 그리고 몫이 0이 될 때까지 나눕니다.  

 

16진수는 10개의 숫자(0~9) 6개의 알파벳이 존재합니다(A=10, B=11.... F=15)

ex. 123= 7*16+11 = 0x7 B, 19= 16+3 = 0x13, 16782 = 4*16^3 + 1*16^2 + 8*16^1 + 14*16^0 = 0x418 E

위와 같이 숫자를 표현하는 것이다.

 

그렇다면 16진수를 십진수로, 십진수를 16진수로 변환하면 어떻게 될까요?(궁금하다 해줘)

앞선 이진수의 경우와 동일하게 2 대신 16으로 곱하거나 혹은 나눠줘야 합니다. 

또 16진수를 이진수로 그리고 이진수를 16진수로 변환할 시에는 16진수의 각 자릿수를 4자리 이진수로 변환해 주면 된다.

figure.6

마찬가지로 이진수를 16진수로 바꾸어 주는 거도 간단합니다. 단지 4 자리씩 뒤에서부터 끊어서 읽으면 됩니다. figure.7을 보면 쉽게 알 수 있습니다(제발...)

figure.7

 

오늘은 컴퓨터 과학을 이해하기 위한 수학적 기본 지식에 대해서 작성해 보았습니다. 이것을 보고도 아직 헷갈리신다면 

삐삑! 정상입니다. 여러번 자주 보시면 이해되실 겁니다. 그러니 다음 편도 기대해 주세요. 감사합니다.

728x90
반응형

'C language(c언어)' 카테고리의 다른 글

Switch문  (2) 2024.01.29
Loop 반복문 (while문) (do-while문)  (0) 2023.11.03
Loop 반복문 (break) (continue)  (0) 2023.09.11
C language(c언어) comment(주석 처리)  (0) 2023.08.31
Loop 반복문 (for)  (2) 2023.08.31