처음으로

정보통신기사

2018년 03월 10일 기출문제

83. 10진수 -593을 10의 보수와 2의 보수로 옳게 표현한 것은? (단, 10의 보수는 5자리수, 양부호는 0, 음부호는 9로 표현하고, 2의 보수는 12비트, 양부호는 0, 음부호는 1로 표현한다.)(오류 신고가 접수된 문제입니다. 반드시 정답과 해설을 확인하시기 바랍니다.)

*해설

<문제 해설>
아래와 같은 오류 신고가 있었습니다.
여러분들의 많은 의견 부탁 드립니다.
추후 여러분들의 의견을 반영하여 정답을 수정하도록 하겠습니다.
참고로 정답 변경은 오류 신고 5회 이상일 경우 수정합니다.

[오류 신고 내용]
-593 2의 보수가
2진수로 푼다음 1의 보수라 변환 시켜서 1을 더하는건데...
그럼 110110101111 에 1의 보수가 101001010000 2의 보수가 101001010001 가 아닌가 ... 생각합니다.
110110101111은 단순하게 -593을 2진수화 시킨거 아닌가요?

[관리자 입니다.
본래 질문글은 무조건 삭제하는것이 원칙이나
제 전공 분야이고 제가 오지랖이 넓어서...

우선 잘못 생각하시는것이.
보수란 부호를 바꾸는 행위를 말한다 할수 있습니다.
좀 어렵게 말하면 덧셈을 이용한 뺄셈 효과의 기대라고 이야기 하는데요.
(알고 보면 쉬운말)

593을 보수를 취하면 -593 이 되고
-593을 보수를 취하면 593 이 됩니다.
부호가 바뀌죠. 그게 보수이고 보수를 사용하는 목적입니다.

문제에서는 보수를 취하라고 한게 아니고 보수로 나타내라(표현하라)는 뜻입니다.
즉, 593을 이진수로 표현한뒤 이를 2의 보수를 취하면 그게 -593을 2진수로 나타낸게 된다는 뜻입니다.

결론적으로 위에 질문주신 110110101111 이걸 1의보수 취한다는 것 자체부터가 틀린게 됩니다.
저거는 앞에 부호가 1 이므로 1의 보수던 2의 보수던 무조건 음수 입니다.

살짝 풀어 보자면
593을 2진수로 표현하면

10 0101 0001 이렇게 됩니다. 잘보시면 이것도 앞이 1이니까 음수 아니냐 생각하시겠죠?
그래서 문제에서 12비트연산이라는 조건을 걸어 놨습니다.
(위같은 문제로 보수에서 자리수 제한이 없으면 보수라는 개념 자체를 적용할수 없습니다.)

결론적으로
0010 0101 0001 이 2진수 593이 되는 겁니다.

2의 보수를 취하는건 1의 보수를 취하고 1을 더해주시는 방법을 이용하시면 됩니다.

0010 0101 0001 <---10진수 593을 2진수로 표현
1101 1010 1110 <---1의 보수
1101 1010 1111 <-- 더하기 1한상태 즉 2의 보수

1의 보수를 거치지 않고 바로 2의 보수로 가는 법이 있는데요 위 예제가 적절하지 않아서..

다른 예제로 설명을 드리면
0010 1011 1000 <--그냥 2진수
1101 0100 1000 <--2진수 바로 바꿈

한방에 바로 바꿀수 있습니다. 더하기 한거 아닙니다. 전 더하기 잘 못합니다.
공식적으로 외우자면(원리도 설명 드릴께요)

그냥 이진수 오른쪽끝에서 부터 왼쪽으로 시선을 이동하면서
처음 1이 나올때까지는 그냥 똑같이 적어 줍니다.
그리고 나머지는 반대로 적어 줍니다.
한번 해보세요. 맞을껍니다.
그리고 1의보수로 바꿨다 더하기 1한것 봐도 비교해 보세요.
원리는 간단합니다.

0000 1000 <--그냥 이진수
1111 0111 <-- 1의 보수
1111 1000 <--2의 보수

1의보 수 된 끝부분 0111 에 더하기 1 하면 1000 이 됩니다. 그냥 이진수 숫자로 되돌아 갑니다.
더하기 잘 못하는 저같은 경우는 그냥 바로 2진수로 바꾸어 버립니다. 그게 실수를 더 줄이는 길이니깐요
열공하세요.]
공유
해설보기
정답보기
<<이전
다음>>
목록
서버에 요청 중입니다. 잠시만 기다려 주십시오...