CAFE

C 프로그래밍

bit 연산을 이용한 곱셈, 나눗셈 (자연수 연산에 한함)

작성자별은빛나고|작성시간17.03.24|조회수1,459 목록 댓글 0
#include <stdio.h>
 
int main(void)
{
    int x, y, result = 0, i, cnt = 0;
    unsigned mask;
    
    printf("두 수 : ");
    scanf("%d %d"&x, &y);
// 곱셈 
    for (result = 0, mask = 0x00000001, i = 0; i < 32; i++, mask <<= 1) {
        if (y & mask)     result += (x << i);    // 해당 자리의 2^n만큼 결과값을 좌로 이동 
    }
 
    printf("%d * %d = %d\n", x, y, result);    
 
    result = x;
// 나눗셈 
    for (mask = y, i = 1; mask <= result; mask <<= 1, i <<= 1);
                             // 피제수를 나눌 수 있는 가장 큰 제수의 2^n을 찾는 과정 
//    mask >>= 1;    // 피제수보다 제수가 한 단계 더 커졌으므로 다시 한단계 작거나 같게
//    i >>= 1;
 
    while (y <= result) { // 피제수가 제수보다 작으면 그만함(소수점 이하 잘라버림) 
        if (result >= mask) { 
            result -= mask;        // 나머지를 구해 다시 피제수로 사용 
            cnt += i;            // 구해진 몫을 더함 
        }
        mask >>= 1;
        i >>= 1;
    }
 
    printf("%d / %d = %d\n", x, y, cnt);    // 최종 얻은 몫 
 
    return 0;
}
cs


다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
맨위로

카페 검색

카페 검색어 입력폼