본문 바로가기

IT/C언어 강의 (중단)

C언어 강의 11강 - 소숫점의 진법변환

C언어 강의 11강 - 소숫점의 진법변환



이번 강의에서는 소숫점의 진법 변환에 대해서 알아볼꺼에요.


8~10강을 공부하셨다면 2진수,8진수,16진수 그리고 10진수 사이의 진법변환은 완벽히 하실 수 있을거에요.


하지만 그건 모두 정수의 진법변환일 때 였고


만약 소숫점이 들어간 숫자의 진법변환은 어떻게 하는지 궁금해 하실 꺼 같아서 이번 강의를 준비했습니다.


이번 강의는 진법변환의 심화된 내용을 다루기 때문에


만약 이해가 잘 안되신다면 그냥 넘어가셔도 좋습니다.


하지만 소숫점의 진법변환을 하는 방법과 원리에 대해서 숙지하고 계시다면 굉장히 도움이 될 것이라고 생각되어


이번 강의를 준비하였습니다.


일단 8진수,16진수 <-> 2진수 에서 소숫점 진법변환을 하는 법을 알려드릴께요.


예시로 알려드리겠습니다.


10110110101001.1011011(2) 이라는 2진수 숫자가 있다고 가정해 보도록 하겠습니다.


이숫자를 8진수로 변환할때에는


정수부분은 오른쪽부터 차례로 3자리씩 끊어주었죠?


16진수로 바꿀때에는


4자리씩 끊어주었구요.


소숫점 부분을 진법변환 할때도 원리는 같습니다.


다만 소숫점이 시작되는 . 을 기준으로 왼쪽부터 끊어주시면 됩니다.


10110110101001.1011011(2) 

                          ↓ 여기서 주의하실 점은 소숫점은 끊어주시고 남는 자리를 0으로 채워주셔야한다는겁니다.

10 110 110 101 001.101 101 100(2) 

2 6 6 5 1 . 5 5 4(8)

26651.554(8)




즉 쉽게 말해서 .을 기준으로 정수부분은 오른쪽부터 소숫점부분은 왼쪽부터 끊어주시면 됩니다.


다만 소숫점부분은 남는 부분은 0으로 채워줘야한다는 것! 그것만 기억해주시면 됩니다.


다시 아래와 같은 예시를 통해 설명드릴께요.


10110110101001.1011011(2) 

10 1101 1010 1001.1011 0110(2) 

2 C A 9.B 6(16) 

2CA9.B6(16) 

이해가 되시나요?


정수부분은 10강에서 다룬대로 하면 되고 소숫점부분은 왼쪽부터 끊어준후 변환해주면되는데 남는자리는 반드시 채워줘야한다는점!


그것만 기억하시면 됩니다.


반대로 8진수 16진수를 2진수로 변환시킬꺼면 역순으로 진행하시면됩니다.


그럼 10진수의 소숫점 부분은 어떻게 2,8,16진수로 변환할수 있을까요?


한번 살펴볼께요.


정수부분은 변환할때에는


2,8,16으로 나눠준다음 나머지를 아래에서 위로 썼죠?


소숫점 부분은 2,8,16으로 곱해준다음 위에서 아래로 써주면 됩니다.


무슨 말인지 아래 예시를 통해 보여드리도록 할께요.


16.125라는 10진수 숫자를 2진수로 변환 할때


정수 부분은


2 | 16 - 0

 ----

   2 | 8 - 0 

 ----

   2 | 4 - 0 

 ----

   2 | 2 - 0 

 ----

1


그리고 아래에서 위로 10000(2) 가 되었죠?


소숫점부분은 

2로 곱해준 후에 자릿수가 올라간다면 1을 올라가지 않는다면 0을 써주면 됩니다.


     125

x       2     

   ------

0   250

        2

   ----

0   500

        2

    ----

1     0

  

보이시나요? 125를 2를 곱하면 250이니까


자리수가 변하지 않았느니 옆에 0을 써주고

250을 2를 곱하면 500 역시나 자리수는 변하지 않았으니

0을 써주고

500에 2를 곱하면 1000으로 자릿수가 변했으니

1을 써줍니다.


그리고 위에서 아래로 001이 소숫점 부분이 됩니다


즉 

10000.001(2) 가 답이 되겠네요.




 

      


이와 같은 원리로 소숫점부분에 각각 진법에 맞게 2,8,16을 곱해준 후에 소수부분이 나눠질때까지 계산하고


곱셈결과 정수를 위에서 아래로 써주면 됩니다.


주의 할점은 이와 같은경우 100퍼 나눠떨어지지 않는 경우가 있습니다..


즉 0이 나오지 않고 계속해서 나눠야 하는 상황이 나오는데 이와같은 경우는 반복이 될껍니다.


무한소수처럼요.


그럼 적당한 선에서 끊어주시면 됩니다.


그럼 반대로  2진수,8진수,16진수를 10진수로 변환할때는 어떻게 할까요?


굉장히 간단합니다.


소숫점 첫번째 자리부터 

을 곱해주면 됩니다.


예를 들어보자면


210.15(8) 라는 8진수는


10진수로 바꾸면



가 됩니다.


2진수와 16진수는 똑같이 2의제곱 16의 제곱을 해당하는 자리에 곱해주면 됩니다.







이해가 안되시는 부분은 댓글 통해서 남겨주세요