본문 바로가기

프로그래밍/C언어

[C언어] 진법

안녕하세요 ! 초보개발자 입니다. 

이 블로그는 개인 공부 정리용 블로그 입니다. 

혹 잘못된 내용이 있다면 지적 부탁드리겠습니다.

그리고 질문주신다면 최대한 아는선에서 답변드리도록 하겠습니다.

그럼 시작하도록 하겠습니다.




진법


10진법과 2진법 


사람이 주로 사용하는 것은 10진법 입니다. 그렇다면 컴퓨터는 어떨까요 ? 컴퓨터는 2진법을 사용합니다. 우리는 컴퓨터를 공부하는 사람이기 때문에 2진법을 알지 못하면 컴퓨터의 동작원리나 데이터 처리방식을 이해하기는 힘들 것입니다.


우리는 int 형 변수에 10을 저장하면 10진수가 저장되는 것 처럼 보이지만 아래그림과 같이 2진수로 바뀌어서 저장 됩니다.

                               


이처럼 2진법은 0과1로만 이루어져 있기 때문에 10진수에 비해 자리를 많이 차지 하게 된다.



비트와 바이트


비트란 ? 한 자리의 2진수를 비트라고 하며 1 비트는 컴퓨터가 값을 저장할 수 있는 최소단위입다. 하지만 1비트는 너무 작은 단위이기 때문에 1비트 8개를 묶어서 바이트 라는 단위로 정의하여 데이터의 기본단위로 사용합니다.


8진법과 16진법


2진법은 위에서 배운것과 같이 0,1로만 이루어져 있습니다. 그렇기 때문에 값을 표현할 떄 길어질수 있다는 단점이 있습니다. 이러한 단점을 보완하기위해 2진법대신 8진법이나 16진법을 사용합니다.


아래표를 보시면 이해하기 쉬우실 것 입니다.


 

 2진수

8진수 

10진수 

16진수 

0

0

10 

11 

11 

100 

101 

110 

111 

1000 

10

1001 

11 

1010 

12 

10  

1011 

13 

11 

1100 

14 

12 

1101 

15 

13 

1110

16 

14 

 1111 

17 

15 

 10000

20 

16 

10 


정수의 진법 변환


10진수를 다른 진수로 변환하기 위해서 10진수를 해당 진수로 나누고 나머지 값을 옆에 적는것을 더이상 나룰 수 없을 때까지 반복한 다음 마지막 몫과 나머지를 아래부터 위로 순서대로 적으면 됩니다. 말로 설명하는것은 어려우니 예시로 살펴보겠습니다.




46을 2로 나누고 나머지를 위의 그림과 같이 적습니다. 그리고 화살표 순서대로 101110 이 10진수 46의 2진수 입니다.

8진수 16진수를 구하는 법은 각각 8과 16으로 나누면 될것입니다.



n진수를 10진수로 변환



다음은 n진수를 10진수로 변환하는 법을 알아보겠습니다. 


먼저 예시를 통해 2진수 110010을 10진수로 바꾸어 보겠습니다.



2진수를 10진수로 바꿀 것이기 때문에 각 자리의수를 위그림과 같이 각 자리의 단위를 2의 제곱으로 하면 됩니다.


1X2^5 + 1X2^4 + 0X2^3 + 0X2^2 + 1X2^1 + 0X 2^0 = 32+16+0+0+2+0 = 50 이므로 2진수 11001010진수로 50 입니다. 


그렇다면 8진수나 16진수는 2의 제곱대신 각각 8의제곱이나 16의 제곱으로 구하면 되겠죠 ? 


오늘은 여기서 마치겠습니다. 


다음시간에는 연산자에 대해서 공부해보도록 하겠습니다.


수고하셨습니다.

'프로그래밍 > C언어' 카테고리의 다른 글

[C언어] 조건문(if,switch)에 대해 알아보자.  (3) 2017.04.06
[C언어] 연산자  (2) 2017.04.05
[C언어] printf 함수와 scanf 함수  (1) 2017.04.03
[C언어] 변수(2)  (1) 2017.04.03
[C언어] 변수(1)  (0) 2017.04.02