문제
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의 보수로 나타내면
11111111 가 된다.
음수의 경우 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진수로 출력하는 프로그램을 작성하시오.
입력
입력의 첫 줄에
출력
출력의 첫 줄에
예제1
입력
00000101
출력
5
예제2
입력
10011000
출력
-104
힌트
출처
jungol