c언어 정수를 입력받아 2진수로 표현하기 질문있습니다.!
글쓴이: dygks8557 / 작성시간: 금, 2019/03/22 - 11:03오전
양수를 입력받았을 때에는 출력이 잘 되는데 음수를 입력받았을 때에 1의 보수까지는 했는데 2의 보수로 넘어가는 부분에서 출력이 안되네요..
제 생각으로는 이상이 없는거같은데 54~63번에 어디에 이상이 있는지 궁금합니다!
아직 지저분한 코딩이지만 이쁘게 봐주세요..ㅎㅎ
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(){ int story[32]; int num; printf("2진법으로 바꾸실 숫자를 적으시오. : "); scanf("%d",&num); int position = 0; if (num >= 0){ while (1){ story[position] = num % 2; // 2로 나눈 몫 값을 저장함 num = num / 2; // 2로 나눈 나머지 값을 저장함 position++; if (num==0) // num의 값이 0이 되면 멈춤 break; } for (int i = position-1 ; i >= 0 ; i--) // 배열의 역순으로 출력 { printf("%d", story[i]); if (i % 4 == 0 ) // 4개씩 나눔 printf(" "); } } else if (num < 0){ num = -num; // 음수를 양수로 변환 while (1){ story[position] = num % 2; // 2로 나눈 몫 값을 저장함 num = num / 2; // 2로 나눈 나머지 값을 저장함 position++; if (num==0) // num의 값이 0이 되면 멈춤 break; } for (int i = position-1 ; i >= 0 ; i--) // 배열의 역순으로 출력 { story[i] = !story[i]; // 1의 보수로 바꿔줌 printf("%d",story[i]); } printf("\n"); for (int i = position-1 ; i >=0 ; i--){ if (story[i] == 0){ story[i] += 1; // 끝자리가 0이면 1을 더해줌 (2의 보수) i = -1; } else if(story[i] == 1){ story[i] = 0; } printf("%d",story[i]); } } printf("\n"); }
Forums:
54~63번이 어딘지 몰라요...
54~63번이 어딘지 몰라요...
지금쯤은 스스로 답을 얻으셨을 거 같은데요?
kldp에서는 글 쓴 사람 본인도 글을 지울 수가 없어요~~~
한번 올린다고 했는데 가끔 두번씩 올라가는 경우가 있네요.
세벌 https://sebuls.blogspot.kr/
헉.. 번호가 안적혀있었네요..!
지금쯤은 스스로 답을 얻으셨을 거 같은데요? < 헉.. 어떻게 아셨죠..? 지금은 후련하게 스스로 답을 찾아서 기분이 좋답니다 ㅋㅋ
for (int i = position-1 ; i >
좀 더 꼼꼼히 보셔야 됩니다.
찾아냈습니다!
i = -1; 이 부분에서 배열에 할당할 값이 없는데 제가 저렇게 선언해버려서 값이 안나오는거였어요.. 그래서 저기를 break;로 for문에서 나오게 했고 i의 값을 뒤집어서 하니 값도 뒤집어서 나오길래 int i = 0 으로 주고 조건식과 증감식을 봐꾸고 밑에 다시 for문으로 출력하게 하니 값이 제대로 나오네요!
감사합니다 ㅠㅠ
댓글 달기