다른 빈칸 과정은 순서도 상황을 따져가며 유추해 내서 그럭저럭 맞았습니다
근데 4번 조건문에서 NO쪽으로 가면서 DEC=128-DEC 이 식을 보고 궁금해서 질문 드립니다.
정답및 해설집을 보면
- 2의 보수로 표현된 수치이므로 다시 2의 보수를 취해 10진수 값을 구한다. <- 요기까지는 이해갑니다.
근데 7자리의 2진수이므로 2의 보수를 구하려면 10000000(128)에서 해당 수치를 빼면 된다. <- 이부분이
잘 이해가 가지 않습니다.
제일 왼쪽 비트는 부호비트라서 7자리인건 알겠는데 저 128이라는 숫자가 어떻게해서 나오게 되는건가용?
실제로 2의 보수상태인 이진수를 2의 보수를 취해서 구한 값이랑 위에서 하듯이 128에서 빼준 값이
같아서 이게 그동안 모르고 있던 공식인건지.... 혼자 이런저런 생각을 하기도 했습니다.
부디 꾸역꾸역 알고리즘을 파헤치고 있는 수험생에게 논리적인 설명 부탁드립니다.
안녕하세요.
음수인 경우, 즉 최상위 비트가 1인 경우는 그냥 2진수가 아니라 2의 보수로 표현된 2진수가 들어 있는 것입니다.
양수인 경우에는 일반적으로 10진수로 변환하는 과정을 적용하면 되는데, 2의 보수인 경우에는 그렇지 않고 2의 보수를 2진수로 변환한 후 10진수로 변환해야 합니다.
2의 보수를 2진수로 변환하는 과정은 2진수를 2의 보수로 표현하는 역의 과정을 진행하면 되는데, 어렵다면 다음을 공식처럼 생각하시면 됩니다.
2의 보수로 표현된 값을 10진수로 변환하려면 2의 보수를 구하는 역의 과정 즉 다시 2의 보수를 취하면 되는데 .. 이 과정이 주어진 비트수보다 1비트 큰 자리를 1로 한 값(즉 7비트 인 경우는 10000000 = 128)에서 빼는 값과 동일합니다.
예를 들어 1010이 2의 보수로 표현된 값이라면 10진수로 변환하기 위해 다시 2의 보수로 취하면 0110이 되어 10진수로 6이라는 값이 됩니다.
마찬가지로 1010 자체를 10진수로 변환한 값 10을 5자리의 값(10000)인 16에서 10을 뺀 6과 동일하게 산출됩니다.
이 과정이 이해하기 어려우시면 2의 보수로 표현된 값을 다시 2의 보수로 구할 때는 한자리 큰 자리 값에서 뺀다고 기억하세요.
오늘도 즐거운 하루 되세요
-
*2015-09-08 09:20:51
안녕하세요.
음수인 경우, 즉 최상위 비트가 1인 경우는 그냥 2진수가 아니라 2의 보수로 표현된 2진수가 들어 있는 것입니다.
양수인 경우에는 일반적으로 10진수로 변환하는 과정을 적용하면 되는데, 2의 보수인 경우에는 그렇지 않고 2의 보수를 2진수로 변환한 후 10진수로 변환해야 합니다.
2의 보수를 2진수로 변환하는 과정은 2진수를 2의 보수로 표현하는 역의 과정을 진행하면 되는데, 어렵다면 다음을 공식처럼 생각하시면 됩니다.
2의 보수로 표현된 값을 10진수로 변환하려면 2의 보수를 구하는 역의 과정 즉 다시 2의 보수를 취하면 되는데 .. 이 과정이 주어진 비트수보다 1비트 큰 자리를 1로 한 값(즉 7비트 인 경우는 10000000 = 128)에서 빼는 값과 동일합니다.
예를 들어 1010이 2의 보수로 표현된 값이라면 10진수로 변환하기 위해 다시 2의 보수로 취하면 0110이 되어 10진수로 6이라는 값이 됩니다.
마찬가지로 1010 자체를 10진수로 변환한 값 10을 5자리의 값(10000)인 16에서 10을 뺀 6과 동일하게 산출됩니다.
이 과정이 이해하기 어려우시면 2의 보수로 표현된 값을 다시 2의 보수로 구할 때는 한자리 큰 자리 값에서 뺀다고 기억하세요.
오늘도 즐거운 하루 되세요