signed maginitude format addition, subtraction ( 부호화 절대치 표현에서 덧셈,뺄셈 )

조회수 619회

이미지

위 순서도대로 진행을 해보았습니다.

17+(-22) 라는 식에서 A = 17, B = -22라고 하겠습니다.

 A_s = 0, A_m = 0010001
 B_s = 1, B_m = 0010110

S = A_s xor B_s = 1 ( Different sign )
R_m에 A_m에서 B_m을 뺀 결과를 넣습니다.
R_m = 1111011 이 나오며 최상위 캐리 비트와 그 전 캐리 비트는 같으므로 overflow가 발생되지 않습니다.

따라서 R_m은 2의 보수화를 해줍니다. R_m = 0000101, R_s는 B_s를 따릅니다.

결과 : R_s = 1, R_m = 0000101 -> R = -5입니다.

(-22) + 17 , 즉 피연산자를 서로 바꾸어보았습니다. 똑같은 식입니다. 이 식을 기준으로 똑같이 진행해보겠습니다.

A_s = 1, A_m = 0010110
B_s = 0, B_m = 1101111

S = A_s xor B_s = 1 ( Different sign )
R_m에 A_m에서 B_m을 뺀 결과를 넣습니다.
R_m = 0000101 이 나오며 최상위 캐리 비트와 그 전 캐리 비트는 같으므로 overflow가 발생되지 않습니다. - (*)

따라서 R_m은 2의 보수화를 해줍니다. R_m = 1111011, R_s는 B_s를 따릅니다.
결과 :  R_s = 0, R_m = 1111011 -> R = 125

느낌상 (*) 부분에서 오버플로우가 발생되어야 결과 아다리가 맞아지는 것 같은데, 제가 아는 오버플로우 판단법상   
오버플로우는 발생되지 않거든요. 어디서 틀렸는지 모르겠습니다.


오버 플로우 판정법이 최상위 캐리비트와 그 전 캐리비트와 다르면 오버플로우, 같으면 이상무 아닌가요 ?
  • (•́ ✖ •̀)
    알 수 없는 사용자
  • 자답, 오버플로우 판단법에서 최상위 캐리비트가 의미하는걸 제가 잘못 생각했습니다. 이전 바이너리에서 넘어오는 캐리비트를 포함한 3개의 피연산자 연산에서 발생하는 캐리비트가 최상위 캐리비트라고 생각했네요. 알 수 없는 사용자 2019.6.13 00:06

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)