부스알고리즘을 공부하는데 좀 헷갈리네요
예를들어 1*127 을 한다고 했을때.. 8비트라고 가정하고..
피승수 : 1 => M=00000001, M'+1(2의보수)=11111111
승수 : 127 => 01111111
카운터 : 8 (=승수의 비트 수)
-------------------------------------------------------------------------------
AC Qn Qn+1 SC
00000000 01111111 0 8 Qn마지막과 Qn+1이 1,0이므로 피승수의 2의보수값 더한다
11111111+
11111111 01111111 0 8
11111111 10111111 1 7 오른쪽 쉬프트
11111111 11011111 1 6 1,1 오른쪽 쉬프트
11111111 11101111 1 5 .
11111111 11110111 1 4 .
11111111 11111011 1 3 .
11111111 11111101 1 2 .
11111111 11111110 1 1 0,1이므로 피승수 더한다
00000001+
00000000 11111110 1 1 오른쪽 쉬프트
00000000 01111111 0 0 카운터 0이므로 종료
-------------------------------------------------------------------------------
==> 결과값 0000000001111111(2)=127(10)
이렇게 되는데
1*128은
피승수 : 1 => M=00000001, M'+1(2의보수)=11111111
승수 : 128 => 10000000
카운터 : 8 (=승수의 비트 수)
-------------------------------------------------------------------------------
AC Qn Qn+1 SC
0000000010000000 0 80,0이므로 쉬프트
00000000 00100000 0 6 그리고 오른쪽 쉬프트
00000000 00010000 0 5 .
00000000 00001000 0 4 .
00000000 00000100 0 3 .
00000000 00000010 0 2 .
00000000 00000001 0 1 1,0이므로 2의보수 더한다
11111111+
11111111 00000001 0 1 그리고 오른쪽 쉬프트
11111111 10000000 1 0 카운터 0이므로 종료
-------------------------------------------------------------------------------
==> 결과값 1111111110000000(2)=???(10)
왜 이상한 값이 나오는 거죠??
8비트*8비트 = 16비트
그럼 8비트짜리들은 -255 ~ 255까지 표현할 수 있는거고.. 그럼 오버플로우 되지 않으니 아무
문제없는 거 아니에요??
1*128 일때 첫번째 줄 이해하시겠죠..? 00000000 10000000 0 8 0,0이므로 쉬프트
지수 계산부터 공부하고 와라