반응형


진법 변환은 해킹 / 보안에서 무조건은 아니지만 쓰일 수 있는 부분 중 하나이다.



그래서 이번 게시물에서는 진법 변환에 대해 한번 알아보려 한다.( 알고리즘 측면이 아닌 가장 기본적 측면으로 )



고등 수학까지 배운다면 기본적으로 2진법을 10진법으로 변환하는 법은 아주 잘 알 것이다.



2진수 -> 10진수 변환


(1011)2 = (1×23) + (0×22) + (1×21) + (1×20) = (11)10 




예를들어 위와 같이 1011이면 10진수로 11임을 바로 확인 할 수 있다.



하지만 1011.101은 어떠한가?

                 


 (1011.101)=  (1 x 23) + (0 x 22)+ (1 x 21) + (1 x 20) + (1 x 2-1) + (0 x 2-2) + (1 x 2-3)


                      =  8+ 0 + 2 + 1 + 0.5 + 0 + 0.125


                      =  11.62510



아직 이러한 소수점에 대해서는 익숙하지 않을 것이다.




.101부터는 다음과 같다. 소수 첫째 자리부터 세번째 자리까지 순서대로 n * 2-1 ,n * 2-2 ,n * 2-3 순서로 곱해진다.


(n은 1또는 0 (이진수에서))



즉, 20 까지 온 후, 그다음 부터는 음수 값으로 곱하면 된다.




8진수에서 10진수 또한 같은 방식으로 행하면 된다.



  


8진수 -> 10진수 변환



(123)8 = (1×82) + (2×81) + (3×80) = 64 + 16 + 3 = (83)10





16진수 -> 10진수 변환



(AB)16 = (A×161) + (B×160) = 160 + 11 = (431)10






이와 반대로 10진수에서 n진수로 가는 방식은 다음과 같다.









10진수 ( 소수점 포함 ) -> 2진수 변환




하지만 소수점 즉, 56



.25에 대해 2진법으로 바꾸는 법에 대해서는 제대로 알아 본 적이 없을 것이다.






정수형 자리 수는 원래 구하던 대로 구하고, 아래 소수점 자리는



n진법이면 소수점 자리에 *n을 계속하여 1이 될 때 까지 반복한다.



즉 0.25에 2진법이니 2를 곱하여 1이 될때까지 반복하여 0 1을 구한다.



따라서 56.25는 2진법으로 111000.001이다.




2진수 ( 소수점 포함 ) -> 10진수 변환



이것을 다시 10진법으로 바꾸면



32 + 16 + 8 + 0 + 0 + 0 + 1 * 2-2 이므로 56.25이다.




2진수 -> 8진수 변환



이 변환 방식은 2진수에서 10진수 변환 후, 10진수에서 8진수로 가는 방법도 존재하지만,



다른 변환 방식에 대해 소개 해 주고자 한다.




즉, 이진수 1110100110을 3자리 씩 묶어서 8진수의 값이 나오도록 한다. (3자리씩 묶으면 111일때 최대 7이므로 8진수에 이용 가능하다.)



가장 앞에 00이 두개 나타난 이유는 8진수의 자리수를 맞춰 주기 위해서이다.





따라서 001 / 110 / 100 / 110 을 나누면 1 6 4 6이 나오고 그것이 곧 8진수 값이다. 




8진수 -> 2진수 변환



눈치를 챘을지 모르겠지만, 그냥 역으로 돌리면 된다.



1646을 1 / 6 / 4 / 6 으로 본 뒤, 001 / 110 / 100 / 110 으로 나타내어 최종적으로 1110100110으로 바꾸면 된다.







2진수 -> 16진수 변환






반응형