본문 바로가기

예전/C, C++

[C언어] 진법과 진법의 변환



1. 진법


 진법을 배워야 하는 이유는 컴퓨터가 0과 1만 사용하는 2진수로 되어있기 때문이다.

그리고 프로그래밍시 변수의 주소 값은 16진수로 표현되기 때문에 이론 공부할때 알아두면 편리하다.



1) 2진수

2진수는 0과 1을 가지고 있다. bit는 0과 1로 구분되는 컴퓨터의 가장 기본적인 단위이다.


     0000 0001

+  0000 0001

------------

     0000 0010



2) 10진수

0~9까지로 우리가 일반적으로 사용하는 숫자이다.


3) 16진수

0~F까지의 수로 16진수 앞에는 0x ( 숫자 0과 소문자 x ) 를 쓴다.


0,1,2,3,4,5,6,7,8,9


A ( 10진수로 10을 의미 )

B ( 10진수로 11을 의미 )

C ( 10진수로 12을 의미 )

D ( 10진수로 13을 의미 )

E ( 10진수로 14을 의미 )

F ( 10진수로 15을 의미 )


     0xAC7

+  0x 004

----------

     0xACB



4) 8진수
0~7까지의 수로 8진수 앞에는 숫자 0을 쓴다.



2. 진법의 변환

진법의 변환이란 10진수를 2진수로, 2진수를 16진수로 변환한다는 것이며, 이는 간단한 수학으로 가능하다.



1) 2진수를 10진수로


 1

  1 (2)
 

 

 


 


   


 


 


 


 X 1

= 128

 X 1

= 64

X 0
= 0    

X 0

= 0  

 X 1
= 8  

X 1

= 4   

X 1
= 2  
X 1
= 1  



2진수는 0의 자리수부터 2의 0승, 2의 1승 ... 이렇게 나간다.

여기서 2의 몇승과 1또는 0을 곱해서 나온수를 모두 더하면 1100 1111(2) 의 10진수 값이 된다.

여기서의 값은 128 + 64 + 15 = 207 이다.



2) 16진수를 10진수로

0x3A (16)

3과 A를 각각 2진수로 바꾸면 0011 1011 이 된다.


 0

1

1

 01 (2)
 

 

 


 


  


 


 


 


 X 0

= 0

 X 0

= 0

X 1
= 32    

X 1

= 16  

 X 1
= 8  

X 0

= 0  

X 1
= 2  
X 1
= 1  


그리고 이것들을 모두 더하면 32 + 16 + 10 = 58 이다.





'예전 > C, C++' 카테고리의 다른 글

[C++] C++ 스타일 파일 입출력  (1) 2012.04.29
[C++] 1차원 배열 셔플  (0) 2012.04.28
_kbhit() 과 _getch()  (0) 2012.04.28
[C++] 이중 포인터 동적할당 및 메모리 해제  (1) 2012.04.28
[C언어] C언어의 자료형  (0) 2012.04.28