본문 바로가기

컴퓨터/C++

*없이 두 정수 곱하기

반응형

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


C++에서는 정수형 데이터에 대해서 곱하기와 비슷한 연산자인 비트연산자를 제공해주고 있다. 그래서 이것을 이용하면 '*'없이 곱하기를 구현할 수 있다. (다만 매우 비효율적이다..ㅋㅋㅋㅋㅋㅋ 그냥 단순히 비트연산자를 다루는 방법을 터득한다고 생각하고 진행하자. 단순히 '*'문자가 필터링이 되어 있다면 어셈블리로 작성하는 것이 속도 상으로 더 나을수도 있겠다.)


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
*없이 두 정수 곱하기  (0) 2016.04.13
Stack을 이용한 간단한 계산기  (0) 2015.10.17