이진수를 입력 받아서 원형회전하는 프로그램임
예를들어 11001001 입력받아서 오른쪽으로 2비트 회전하면 01110010 으로 나오는걸 출력 받는거임.
근데 씨발 컴터가 2진수로 입력못받잖아
그래서 문자열로 저장한다음에
그걸 어떤 정수형 변수에 정수로 저장하고
그 변수를 비트이동 시키고, 다른변수새로 만들어서 반대방향으로 8-비트수 만큼 비트이동시키고
그걸 or 연산한다음에 변수에 넣고
그 변수를 또다시 십진수로 바꿔서 출력할려고햇는데
씨발 다짠거같은데 생각해보니까 문자열로 입력받으면 NULL문자도 입력되잖아 이거 어떻게처리해야되냐 이것만하면된다
코드첨부- 내 대가리가 이렇다
#include <stdio.h>
void calculate1(struct variables *p);
void calculate2(struct variables *p);
struct variables{
char ejin[8];
int rotate1,rotate2,a,b;
char answer[8];
};
int main(void)
{
struct variables *p;
printf("이진수를 8비트로 입력하시오: ");
scanf("%s", p->ejin);
printf("회전 비트수를 입력하시오: ");
scanf("%d",&p->rotate1);
printf("회전 방향을 입력하시오(왼쪽:-1, 오른쪽:1): ");
scanf("%d",&p->rotate2);
calculate1(p);
calculate2(p);
printf("원형 회전한 결과는 %s",p->answer);
}
void calculate1(struct variables *p)
{
int i, k=1;
for(i=7;i>=0;i--)
{
p->a=p->a+p->ejin[i]*k;
k=k*2;
}
if((p->rotate1)==-1)
{
p->a=(p->a<<(p->rotate1));
p->b=(p->a>>(8-(p->rotate1)));
}
else
{
p->a=(p->a>>(p->rotate1));
p->b=(p->a<<(8-(p->rotate1)));
}
p->b=p->b||p->a;
}
void calculate2(struct variables *p)
{
int i;
int k=1;
for(i=7;i>=0;i--)
{
k=k*2;
p->answer[i]=(p->b)/k;
}
}
그거 해줬다
다시해줘 질문다시보셈
그냥 이진수 입력받으면 되는거 아님?
널값 입력받는다는게 뭔말? 0101 1바이트 자리 맞춰서 입력을 안한다는거임?
ㄴ 0101 입력받으면 배열 안에는 0101\0 이 입력되니까 연산에서 잘 모르겟다는거야
ㅋ 나이거 2달쯤 전에 리포트로 냈는데
근데 애초에 입력이 2진수가 아닌거 아님?
ㄴ 내가말햇잖아 문자열로 입력된다고... 그래서 널문자떄문에 좆같다는거
널문자 해결법 가르쳐드림 백슬레시영이 널값을 뜻하는거임 이걸 사용해보셈
글쓴이인데 fflush하면 될려나??
됨?
근데 위에서 말한것처럼 첨에 받은 값이 이진수가 아닌데 어떻게 이진수 비트이동을 함 이걸 십진수로 바꾸는 부분은 짜르고 올린거임?
ㄴ 정수로 바꾸는건 calculate1함수에 나와잇어