안녕하세요.
음수를 2의 보수로 표현한다는 조건이 있는 경우
음수인 2진수를 10진수로 변환하면 그 값은 아직 2의 보수인 2진수의 10진수 변환값이므로 이를 다시 한 번 2의 보수로 변환하는 과정이 필요합니다.
그 과정을 간단히 처리하는 방법 중 하나가 표현된 크기(여기서는 7비트, 8비트이지만 첫 번째가 부호 비트이므로 실제는 7비트)인 7비트에서 나올 수 있는 가장 큰 값인 128에서 10진수로 변환된 값을 빼주는 방법입니다.
그러므로 10진수로 변환된 DEC를 128에서 빼주는 것이죠.
물론 실제 처리되는 크기가 8비트라면 256에서 빼주면 됩니다.
예를 들어 10101010이라고 가정한다면 맨 앞이 1이므로 이 값은 음수이고 2의 보수로 표현된 상태입니다(문제의 처리조건에서 그렇게 하기로 규칙을 정했기 때문입니다.).
맨 앞의 1비트를 제외한 나머지 7비트를 10진수로 변환하면
0 1 0 1 0 1 0
= 0*2의 6승 + 1*2의 5승 + 0*2의 4승 + 1*2의 3승 + 0*2의 2승 + 1*2의 1승 + 0*2의 0승
= 0 + 32 + 0 + 8 + 0 + 2 + 0
= 42
인데 이는 2의 보수로 표현된 것이므로 128에서 빼면 128-42 = 86이 됩니다. 그런 뒤 -1을 곱하므로 -86이 됩니다.
그럼 10101010이 2의 보수로 표현된 것이라면 원래의 2진수가 얼마인지 확인해 보겠습니다.
10101010에 다시 2의 보수를 취하면 원래의 2진수가 됩니다.
10101010에 2의 보수를 취하면 01010110이 됩니다. 이는 86입니다. 맨 앞의 부호가 1이었으므로 음수로 표현하면 -86이 됩니다.
결국 두 과정의 값이 같으므려 2의 보수로 표현된 값을 원래의 값으로 변환할 때 128에서 빼주는 것과 같다는 것을 알 수 있습니다.
내용이 복잡해서 잘 이해되지 않는다면, 2의 보수로 표현된 값을 원래의 10진수로 변환할 때는 제시된 크기에서 나올 수 있는 가장 큰 값에서 빼준다는 것만 기억하세요.
오늘도 즐거운 하루 되세요.
-
*2017-08-22 09:33:07
안녕하세요.
음수를 2의 보수로 표현한다는 조건이 있는 경우
음수인 2진수를 10진수로 변환하면 그 값은 아직 2의 보수인 2진수의 10진수 변환값이므로 이를 다시 한 번 2의 보수로 변환하는 과정이 필요합니다.
그 과정을 간단히 처리하는 방법 중 하나가 표현된 크기(여기서는 7비트, 8비트이지만 첫 번째가 부호 비트이므로 실제는 7비트)인 7비트에서 나올 수 있는 가장 큰 값인 128에서 10진수로 변환된 값을 빼주는 방법입니다.
그러므로 10진수로 변환된 DEC를 128에서 빼주는 것이죠.
물론 실제 처리되는 크기가 8비트라면 256에서 빼주면 됩니다.
예를 들어 10101010이라고 가정한다면 맨 앞이 1이므로 이 값은 음수이고 2의 보수로 표현된 상태입니다(문제의 처리조건에서 그렇게 하기로 규칙을 정했기 때문입니다.).
맨 앞의 1비트를 제외한 나머지 7비트를 10진수로 변환하면
0 1 0 1 0 1 0
= 0*2의 6승 + 1*2의 5승 + 0*2의 4승 + 1*2의 3승 + 0*2의 2승 + 1*2의 1승 + 0*2의 0승
= 0 + 32 + 0 + 8 + 0 + 2 + 0
= 42
인데 이는 2의 보수로 표현된 것이므로 128에서 빼면 128-42 = 86이 됩니다. 그런 뒤 -1을 곱하므로 -86이 됩니다.
그럼 10101010이 2의 보수로 표현된 것이라면 원래의 2진수가 얼마인지 확인해 보겠습니다.
10101010에 다시 2의 보수를 취하면 원래의 2진수가 됩니다.
10101010에 2의 보수를 취하면 01010110이 됩니다. 이는 86입니다. 맨 앞의 부호가 1이었으므로 음수로 표현하면 -86이 됩니다.
결국 두 과정의 값이 같으므려 2의 보수로 표현된 값을 원래의 값으로 변환할 때 128에서 빼주는 것과 같다는 것을 알 수 있습니다.
내용이 복잡해서 잘 이해되지 않는다면, 2의 보수로 표현된 값을 원래의 10진수로 변환할 때는 제시된 크기에서 나올 수 있는 가장 큰 값에서 빼준다는 것만 기억하세요.
오늘도 즐거운 하루 되세요.