2013-09-24 2 views
0

이진수를 더하고, 빼고, 곱하고 나누기위한 프로그램을 작성하는 데 문제가 있습니다. 내가 겪고있는 주요 문제는 1과 0 (이진 부분)의 출력을 제공하도록 프로그램을 제한 할 수 있고 또한 101.1이나 1.0101 같은 십진수로 이진수를 조작 할 수 있어야합니다. 아래의 프로그램은 내가 연구 중에 온라인으로 찾았지만 아직 완전히 내 자신을 구현하는 방법으로 작동하지 않습니다 또는 그들에 소수에서 이진 컴퓨팅이 가능하지 않습니다. 배열을 사용하고 싶지는 않습니다.이 계산을 수행 할 비트에 따라 최대 출력을 제한합니다.C에서 이진 조작

몇 가지 잠재적 인 아이디어가 기대됩니다.

#include<stdio.h> 

int main(){ 

    long int binary1,binary2; 
    int i=0,remainder = 0,sum[20]; 

    printf("Enter any first binary number: "); 
    scanf("%ld",&binary1); 
    printf("Enter any second binary number: "); 
    scanf("%ld",&binary2); 

    while(binary1!=0||binary2!=0){ 
     sum[i++] = (binary1 %10 + binary2 %10 + remainder) % 2; 
     remainder = (binary1 %10 + binary2 %10 + remainder)/2; 
     binary1 = binary1/10; 
     binary2 = binary2/10; 
    } 

    if(remainder!=0) 
     sum[i++] = remainder; 

    --i; 
    printf("Sum of two binary numbers: "); 
    while(i>=0) 
     printf("%d",sum[i--]); 

    return 0; 
} 
+6

이 충격적인 들릴 수도 있지만, 오늘날의 컴퓨터는 이진수로이 값을 모두 처리 ...' int a = 10; int b = 10; int c = a + b;''Voila, 바이너리 합계가 있습니다 ... 당신이 가진 이슈는 [** 바이너리로 인쇄하는 것입니다 **] (http://stackoverflow.com/questions/111928/is-there -a-printf-converter-to-binary-format) 형식을 사용합니다. (그리고 Ivaylo가 지적했듯이 : 입력으로 가져 오기 ...) – ppeterka

+2

이 프로그램은 십진법 이진수를 처리 할 수 ​​없습니다. '% ld'을 사용하여 입력 번호를 읽습니다. 아마'% s'을 사용하여 입력을 문자열로 읽어야합니다. –

+1

'배열을 사용하고 싶지 않습니다.이 계산을 수행하기 위해 따로 떼어 놓은 비트에 따라 최대 출력을 제한합니다.이 또한 충격일지도 모르지만 데이터 형식은 무한하지 않습니다. – ppeterka

답변

0

고정 소수점 10 진수가있는 경우 해당 코드가 작동 할 수 있습니다.

문자열을 이중 숫자로 구문 분석 한 다음 표준 산술을 사용하는 것이 좋습니다. 숫자를 파싱하려면 문자열을 "." 소수 구분 기호. 정수 부분을 오른쪽에서 왼쪽으로 구문 분석합니다. 0부터 시작하여 2의 거듭 제곱을 곱하여 1과 0을 곱합니다. 다음으로 증가하는 2의 역수를 곱하여 다른 문자열 (소수 부분)을 하나씩 파싱합니다. 예를 들어

: 110.11001

110 + 11001

정수 반전 = 0 * 2^0 + 1 * 2^1 + 1 * 2^2 진수 = 1 * 2^-1 + 1 * 2^-2 + 0 * 2^-3 + 0 * 2^-4 + 1 * 2^-5