초등학교 산수시간에 뭐했는지 생각해보세요.
덧셈의 경우 우리가 쓰는 10진법에서는
각 자리수별로 더하되, 합이 10을 초과할 경우 윗자리로 올려서 더하죠?
2진법에서도 똑같이 적용됩니다. 각 자리별로 덧셈을 해서 만일 2이상의
숫자가 나오면 바로 위로 올려서 더하면 됩니다.
10진법하고의 차이는 자릿수 합이 10이 아닌 2가 나올 때 윗자리로 올라간다는 겁니다.
곱셈도 산수시간에 나온 대로 하고요.
2진수의 구구단은 아래와 같이 됩니다.
0X0 = 0
0X1 = 0
1X0 = 0
1X1 = 1
곱셈은 이게 다입니다.
한가지 예를 드리자면...
1010X1101 을 계산한다고 하면 아래와 같이 됩니다.
1010
X 1101
---------------
1010 ---> 1101 의 가장 아랫자리 1과 1010이 곱해진값
0000 ---> 1101 의 두번째 자리 0과 1010이 곱해진값
1010 ---> 1101 의 세번째 자리 1과 1010이 곱해진값
1010 ---> 1101의 가장 윗자리 1과 1010이 곱해진값
----------------
10000010 ---> 4개 수 다 더하세요.
덧셈은.. 같은 자리수의 값을 더하는 형식으로 해야겠지요? 거기에
덧셈은..
같은 자리수의 값을 더하는 형식으로 해야겠지요? 거기에 carry flag가 필요할 것이고요..
곱셈은..
그러한 덧셈 알고리즘을 그대로 쓰시면 됩니다. 0101 * 1000 일 경우는 101을 1000(binary)번 더해주면 되니까요 ;)
음.. 곱셈은...
2진수로 연산하라는 말이...
곱셈은 윗분 말씀처럼 계속 더해도 되지만...
예를 드신 0101 * 1000 의 경우는
0101을 좌측으로 3bit쉬프트 하면 됩니다.
5 * 8 = 40
0101 * 1000 = 0101 000
좌로 쉬프트 하는것은 * 2가 되니까 다음과같이 쉬프트 후 합하면 됩니다.
8 * 5 = 40
1000 * 0101
0101중 3번째 자리가 1이므로 좌로 2번 쉬프트 100000
0101중 1번째 자리가 1이므로 그냥 1000
--------------------------------------------------------------------
두수를 더하면 101000
이런식으로 계산됩니다.
가끔은 밥을 굶어도 살 수 있다.
초등학교 산수시간 생각하세요.
초등학교 산수시간에 뭐했는지 생각해보세요.
덧셈의 경우 우리가 쓰는 10진법에서는
각 자리수별로 더하되, 합이 10을 초과할 경우 윗자리로 올려서 더하죠?
2진법에서도 똑같이 적용됩니다. 각 자리별로 덧셈을 해서 만일 2이상의
숫자가 나오면 바로 위로 올려서 더하면 됩니다.
10진법하고의 차이는 자릿수 합이 10이 아닌 2가 나올 때 윗자리로 올라간다는 겁니다.
곱셈도 산수시간에 나온 대로 하고요.
2진수의 구구단은 아래와 같이 됩니다.
0X0 = 0
0X1 = 0
1X0 = 0
1X1 = 1
곱셈은 이게 다입니다.
한가지 예를 드리자면...
1010X1101 을 계산한다고 하면 아래와 같이 됩니다.
Written By the Black Knight of Destruction
곱셈 시에는 Booth's Algorithm도 있습니다.
곱셈 시에는 Booth's Algorithm도 있습니다.
부스의 알고리즘 (Booth's Algorithm)여러개의 인스트
부스의 알고리즘 (Booth's Algorithm)
여러개의 인스트럭션 사이클을 필요로 하는 곱셈의 연산을
쉬프트 연산과 가산기를 이용해서 보다 적은 인스트럭션 사이클 내에 수행해 내도록 하는 알고리즘입니다.
자세한 알고리즘들은 디지탈 설계 (공부한지 오래되어서 기억이 가물가물하네요 ^^;) 관련된 책들을 찾아 보시면 나올것입니다.
기억나는 책은.. Computer System Architecture 던가...
보다 더 효율적으로 수행하기 위해서 수정된 Modified Booth's Algorithm 도 있습니다 :)
댓글 달기