2진수를 10진수로... > 문제은행



문제은행

1274 : 2진수를 10진수로...

제한시간: 1000 ms    메모리제한: 32 MB
해결횟수: 2155 회    시도횟수: 3488 회   



 

2진수를 입력받아 10진수로 바꾸어주는 프로그램을 생각해보자.

 

주어지는  2진수는 8비트로 구성되어있으며 최상위비트는 부호비트이다.
최상위 비트의 값이 0이면 양수, 1이면 음수이며 

음수의 경우 2의 보수로 나타낸다.

 

[ 1의 보수 만들기 ] 

각 비트의 값이 1인 경우 0으로, 0인 경우 1로 바꾸면 된다.

(예 ) 

11010001 을 1의 보수로 바꾸면

00101110 가 된다.
 

2의 보수만들기 ] ​

2의 보수는 1의 보수의 마지막 비트에 1을 더한다. 

(예)

00000001 (10진수 1)을 1의 보수로 바꾸면

11111110 가 되고 여기에 1을 더하여 2의 보수로 나타내면

1111111가 된다.

음수의 경우 2의 보수로 나타내므로 11111111​ 는 십진수로 -1이된다.

 

여기서 11111111​ 는10진수로 -1인데 이는 01111111​ (10진수 127)과 10000000​​​를 더한 결과이다.

따라서 아래와 같은 식을 세울수 있다.

11111111​ = 01111111 + 10000000​​ 

11111111​ - 01111111 = 10000000​​ 

이제 (11111111) - (01111111) 는 10진수로 (-1) - (127) = -128이므로

10000000​​ 는 ​-128이다.

 

부호있는 8비트 2진수를 입력받아 10진수로 출력하는 프로그램을 작성하시오.

 

 

 




입력의 첫 줄에 8자리의 2진수가 들어온다.



출력의 첫 줄에 10진수로 변환한 값을 출력한다.


00000101
5


10011000
-104


[보수의 정의]
1. N자리 A진법 수 K가 있을 때 A의 보수는 : AN - K, 또는 A-1의 보수를 구하고 1을 더한다.
2. N자리 A진법 수 K가 있을 때 A-1의 보수는 : AN - 1 - K

[  Horner's Method ]
2진수 1101을 자리수별 가중치를 주어 10진수로 나타내면 아래와 같다.
1101 = 0 * 24 + 1 * 23 + 1 * 22 + 0 * 21 + 1  이므로
     =(((0*2 + 1) * 2 + 1) * 2 + 0) * 2 + 1 과 같다.


출처 : jungol



자료의 표현, 수학알고리즘

HancomEducation E-mail : hancomc@hotmail.com, comkiwer@naver.com Tel : 031-388-0999 FAX : 031-388-0996 정올소개 이용약관 개인정보처리방침
경기도 안양시 동안구 호계동 1065-10 협성골드프라자 601호, 경기도 안양시 동안구 평촌대로 109 협성골드프라자 601호
Copyright@2010-2015 jungol. All right reserved.