반응형
모든 컴퓨터 언어에서는 곱하기 연산을 기본적으로 제공해주고 있다. 그런데 만약 '*'가 막혀 있다면 어떻게 계산을 할 수 있을까?
C++에서는 정수형 데이터에 대해서 곱하기와 비슷한 연산자인 비트연산자를 제공해주고 있다. 그래서 이것을 이용하면 '*'없이 곱하기를 구현할 수 있다. (다만 매우 비효율적이다..ㅋㅋㅋㅋㅋㅋ 그냥 단순히 비트연산자를 다루는 방법을 터득한다고 생각하고 진행하자. 단순히 '*'문자가 필터링이 되어 있다면 어셈블리로 작성하는 것이 속도 상으로 더 나을수도 있겠다.)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | int multiply( int a, int b){ int result = 0; int tmp = 0; int sign = 0; // b의 음수여부 if (b < 0){ b = -b; sign = 1; } while (b > 0){ if (b&1){ result += a << tmp; } b >>= 1; tmp++; } return (sign==0)?result:-result; } |
이 코드에 대해 설명을 간단히 하자면 먼저 b가 양수인지 음수인지를 판별해서 양수로 만들어준 다음, b를 이진수로 표현하여 얻어진 내용을 이용해서 비트 연산자로 그만큼을 더해주는 방식으로 구현하였다.
반응형
'컴퓨터 > C++' 카테고리의 다른 글
complex class 구현 (0) | 2016.04.27 |
---|---|
대소문자 변경하기 (0) | 2016.04.18 |
Merge Sort 구현 (0) | 2016.04.17 |
Stack 기반 미로 찾기(DFS) (0) | 2015.10.27 |
Stack을 이용한 간단한 계산기 (0) | 2015.10.17 |