jungol- 2진수를 10진수로... > 문제은행 : 정보올림피아드&알고리즘



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

제한시간
1000 ms   
메모리제한
32 MB   
해결횟수
279 회   
시도횟수
382 회   

문제

 

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

Hint!

[보수의 정의]

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

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

경기도 안양시 동안구 평촌대로 109 협성골드프라자 601호

TEL : 031-360-4144 FAX : 031-388-0996 E-mail : hancomc@hotmail.com, comkiwer@naver.com

Copyrightⓒ 2010 jungol. All right reserved.

TOP