페이지가 로드되지 않나요? 여기를 눌러보면 고쳐질 수도 있어요.
Placeholder

#1274

2진수를 10진수로... 1초 32MB

문제

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진수로 변환한 값을 출력한다.


예제1

입력
00000101
출력
5

예제2

입력
10011000
출력
-104


출처

jungol

역링크