2017-09-07 5 views
-1

그래서 두 개의 인수가 정수가되는 프로그램을 만드는 작업이 있습니다. 그 정수를 이진 값으로 변환 한 다음 가장 중요한 "1"비트의 위치를 ​​출력해야합니다. 아래는 현재 정수를 2 진수로 성공적으로 변환 한 코드입니다. 나는 이진 값으로 배열을 채운 다음 마지막 위치에서 순환하고 "1"을 만날 때까지 카운터를 감소시키고 그 다음에 현재 위치에서 배열의 전체 길이를 빼서 그 비트의 위치를 ​​인쇄하려고합니다. 배열배열에 이진 값을 채우고 최하위 비트를 확인하려고합니다.

#include <stdio.h> 
#include <stdlib.h> 

int convert(int); 
int main(int argc, char *argv[]) 
{ 
    int bin; 
    int n = atoi(argv[2]); 

     if (argc<2) 
     { 
       printf("\nNot Enough Arguments."); 
     } 
     if (argc>2) 
     { 
       printf("\nToo Many Arguments."); 
     } 
     if (argc==2) 
     { 
       scanf("%d", &n); 
       bin = convert(n); 
       lessbit[] = bin; 
     } 

    return 0; 
} 

int convert(int n) 
{ 
    if (n == 0) 
    { 
     return 0; 
    } 
    else 
    { 
     return (n % 2 + 10 * convert(n/2)); 
    } 
} 
+0

'int n = atoi (argv [2]);'나는 여기서 읽기를 멈췄다. 'argc'의 값을 검사하기 전에'argv [2]'를 사용합니까? 그것은 단지 문제를 요구하고 있습니다. 또한 명백한 것을 추가해야합니다 : int는 이미 바이너리입니다. – John3136

+0

@ J.Clark 정수는 이미 바이너리 형식으로 저장되어 있습니다. –

+0

BTW'argv'를 사용하기 전에'argc' 검사가 필요합니다. 'lessbit [] = bin;':'lessbit'? – BLUEPIXY

답변

0

숫자는 컴퓨터에 바이너리로 저장되므로 아무 것도 변환 할 필요가 없습니다.

다음은 첫 번째 1 위치가 오른쪽에서 왼쪽 (최소 중요도 1 비트)으로 인쇄되는 작은 데모 프로그램입니다.

#include <stdio.h> 
#include <stdlib.h> 

int main(int arc, char* argv[]) { 
    if(argc != 2) 
     exit(EXIT_FAILURE); 

    int bin = atoi(argv[1]); 
    unsigned counter = 0; 

    while(bin % 2 == 0) { 
     bin >>= 1; 
     counter++; 
    } 

    printf("%u\n", counter); 
    return 0; 
} 

이 코드 지수베이스 2를 출력 그래서 수가 3 인 1 (가 2^3 위치 이후)에 위치 될 2 진 출력에 1000 8 인 경우.

-1

#include <stdio.h> 
#include <stdlib.h> 
int main(int argc, char const *argv[]) { 
    if(argc == 2) 
    { 
    int length = 0, count = 0; 
    int n = atoi(argv[1]); 
    int found = 0; 
    while(n) 
    { 
     if(n%2 && !found) 
     { 
     count = length; 
     found = 1; 
     } 
     n/=2; 
     length++; 
    } 
    printf("%d %d\n", length, count); 
    } 
    else printf("Invalid arguments\n"); 
    return 0; 
} 

를 사용하여 길이를하고 당신이 필요로 계산 할 수 있습니다.

+0

설명이없는 코드 덤프는 나쁜 대답입니다. – John3136

+0

당신은 똑같은 일을 했었습니다. 반복적으로 반복적으로 수행하지 않고 결과를 저장하고 바이너리처럼 보이는 정수를 생성하는 대신 공간을 절약하려고했습니다. 그리고 정수 제한에 도달 할 수있었습니다. 그래서 나는 당신이 어떤 설명도 필요로하지 않는다고 생각했다. ./a.out 뒤의 인수가 정수이면 코드가 덤프되어서는 안됩니다. –

관련 문제