K=2**8-P를 했는데
플로차트에서 DEC=DEC+(K*S[P])에서
K*S[P]를 하면 K도 64 S[P]도 64지 않나요?
그럼 DEC를 더했을때 말도 안되게 큰값이 나오게 되는데
제가 잘못이해한것 같은데 설명 부탁드립니다.
안녕하세요.
이 알고리즘은 부호 비트는 값으로 처리할 의미가 없으므로 2번째 비트부터 처리를 합니다.
예를 들어 1101 1101이 입력되었다고 가정하면,
1101 1101은 -35입니다. 앞의 부호가 1이므로 음수이고 음수인 경우 값은 2의 보수로 표현된 값이기 때문이죠.
+35의 경우는 0010 0011입니다. 이를 2의 보수로 표현해 보면, 먼저 1의 보수로 변환 1101 1100입니다. 여기에 +1을 하면 2의 보수가 되죠. 1101 1101이 됩니다.
순서도에서 처리는 다음과 같이 수행됩니다.
부호 비트를 제외한 나머지 비트, 즉 P가 2부터 진행하여 각 값의 누적값을 DEC에 저장합니다.
즉 DEC = DEC+(K*S[P])는 각 자리의 누승인 (K*S[P])을 DEC에 누적하는 것이죠. 각 자리의 누승은 아래와 같습니다.
그러면 값이 1인 자리만 누승의 곱이 의미가 있으므로
= 1*2^6 + 0 + 1 * 2^4 + 1*2^3 + 1*2^2 + 0 + 1*2^0
이제 각 누승을 DEC에 누적하면
= 64 + 16 + 8 + 4 + 1 = 93
즉 해설에서 동그라미 1~7번까지의 처리 결과로 DEC는 93이 됩니다.
이어서 S(1)이 1이므로 DEC = 128-DEC가 되어 DEC = 128-93 = 35가 됩니다.
이어서 DEC=DEC*(-1)에 의해 DEC는 최종적으로 -35를 갖습니다.
즉 1101 1101은 음수로 표현된 2의 보수 값으로 10진수로 표현하면 -35가 되는 것이죠.
오늘도 즐거운 하루 되세요.
-
*2013-04-05 09:18:54
안녕하세요.
이 알고리즘은 부호 비트는 값으로 처리할 의미가 없으므로 2번째 비트부터 처리를 합니다.
예를 들어 1101 1101이 입력되었다고 가정하면,
1101 1101은 -35입니다. 앞의 부호가 1이므로 음수이고 음수인 경우 값은 2의 보수로 표현된 값이기 때문이죠.
+35의 경우는 0010 0011입니다. 이를 2의 보수로 표현해 보면, 먼저 1의 보수로 변환 1101 1100입니다. 여기에 +1을 하면 2의 보수가 되죠. 1101 1101이 됩니다.
순서도에서 처리는 다음과 같이 수행됩니다.
부호 비트를 제외한 나머지 비트, 즉 P가 2부터 진행하여 각 값의 누적값을 DEC에 저장합니다.
즉 DEC = DEC+(K*S[P])는 각 자리의 누승인 (K*S[P])을 DEC에 누적하는 것이죠. 각 자리의 누승은 아래와 같습니다.
그러면 값이 1인 자리만 누승의 곱이 의미가 있으므로
= 1*2^6 + 0 + 1 * 2^4 + 1*2^3 + 1*2^2 + 0 + 1*2^0
이제 각 누승을 DEC에 누적하면
= 64 + 16 + 8 + 4 + 1 = 93
즉 해설에서 동그라미 1~7번까지의 처리 결과로 DEC는 93이 됩니다.
이어서 S(1)이 1이므로 DEC = 128-DEC가 되어 DEC = 128-93 = 35가 됩니다.
이어서 DEC=DEC*(-1)에 의해 DEC는 최종적으로 -35를 갖습니다.
즉 1101 1101은 음수로 표현된 2의 보수 값으로 10진수로 표현하면 -35가 되는 것이죠.
오늘도 즐거운 하루 되세요.