본문 바로가기

c&c++

정수형 데이터를 n비트 오른쪽으로 shift

주어진 정수형 데이터(num)를 n비트 오른쪽으로 circular shift하는 코드를 작성하시오.

이때, 출력은 2진수로 하시오.

- 입력은 scanf 사용

- 입력된 (원본)데이터와 쉬프트된 (결과)데이터를 2진수로 각각 출력


#include<stdio.h>

 

 

void ppp(int);


int main(void) {


int num;
int shift;
int i;
unsigned int check = 1;

scanf_s("%d %d", &num, &shift);
ppp(num);

for (i = 0; i < shift; i++) {
if (num >= 0) {
if ((num & check) == 0) {
num = num >> 1;
}
else {
num = num >> 1;
num = num | 0x80000000;
}
}
else {
if ((num & check) == 0) {
num = num >> 1;
num = num & 0x7fffffff;
}
else {
num = num >> 1;

}

}
}
ppp(num);
return 0;
}

void ppp(int num) {
unsigned int check = 0x80000000;
int i;

for (i = 0; i < 32; i++)
{
if ((num & check) == 0)
{
printf("0");
}
else {
printf("1");
}
check = check >> 1;
}
printf("\n");
}

 

 

 

함수 선언을 메인내에서 하면, 그 함수의 존재는 메인 밖에 모른다.

즉 다른 함수에서는 프린트 함수를 사용 못 한다.

 

함수 선언만 외부에서 하고, 나머지는 메인 내에 넣어라.

전역변수를 남발하는 건 좋지 않다.