Loading [MathJax]/extensions/tex2jax.js
본문 바로가기

컴퓨터/C++

*없이 두 정수 곱하기

반응형

모든 컴퓨터 언어에서는 곱하기 연산을 기본적으로 제공해주고 있다. 그런데 만약 '*'가 막혀 있다면 어떻게 계산을 할 수 있을까?


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