본문 바로가기

C&C++ 개발

10. Bitwise Operators

해커랭크 요약 :

이 도전은 당신이 C의 비트연산자에 대해 배울 수 있게 해줄 것이다.
CPU 안에서 덧셈, 뺄셈, 곱셈, 나눗셈과 같은 수학적 연산은 비트 레벨로 이루어진다. C 프로그래밍에서 비트 수준 연산을 수행하기 위해 아래에 설명한 비트 전송률 연산자를 사용한다.



요구사항 :

제한사항은 2<=n<=10^3이고 2<=k<=n일 때,

1에서 n까지의 수열은 S이다.

공백으로 구분된 n과 k를 받아 S에서 뽑은 수인 a와 b(a와 b는 같지 않고 a<b이다)bitwise 연산하라

bitwise연산된 결과가 k보다 작은 경우를 출력한다



기능설계 :

공백으로 구분된 n과 k를 scanf로 받아 

n을 1부터 n-1까지의 for문을 써서 a와 b를 가져온다 (a와 b는 같지 않고 a<b이다)를 AND(&), OR( | ), XOR(^) bitwise 연산한다

a와 b가 bitwise 연산된 결과가 k보다 작은 경우를 printf로 출력한다



코드 :

#include <stdio.h>

#include <string.h>

#include <math.h>

#include <stdlib.h>

//Complete the following function.



void calculate_the_maximum(int n, int k) {

    int a, b;

    int and_res=0, or_res=0, xor_res=0;


    for (a=1; a<n; a++)

    {

        for (b=n; a<b; b--)

        {

            if((a&b)<k && (a&b)>and_res)

            {

            and_res = a&b;

            }

        }


        for (b=n; a<b; b--)

        {

            if((a|b)<k && (a|b)>or_res)

            {

            or_res = a|b;

            }

        }


        for (b=n; a<b; b--)

        {

            if((a^b)<k && (a^b)>xor_res)

            {

            xor_res = a^b;

            }

        }


}

    printf("%d\n%d\n%d\n", and_res, or_res, xor_res);

}

int main() {

    int n, k;


    scanf("%d %d", &n, &k);

    calculate_the_maximum(n, k);


    return 0;

}



다이어그램 :





추측한 학습목표 :

비트연산을 사용해봐

원하는 조건들을 and를 사용해서 중첩해서 적용할 수 있니?

for문이랑 if문을 제대로 사용해볼래?

함수 분리 좀

and_res에서 왜 32715라는 값이 출력됐을까? -> 모두 0으로 초기화해서 해결

'C&C++ 개발' 카테고리의 다른 글

11. Conditional Statements in C  (0) 2018.12.14
9. Sum of Digits of a five Digit number  (0) 2018.12.13
8. Boxes through a tunnel  (0) 2018.12.11
7. Digit Frequency  (0) 2018.12.10
6. For Loop in C  (0) 2018.12.08