Start New Discussion within our Software Development Community

Hi there,

I tried binary addition. It seems to work fine. Could someone tell me if there's a better way of doin this or any bugs that could be uncovered in the code below?

I appreciate your time.

Thanks,
Tina

#include <stdio.h>

void binaryAdd(char *, char *);

int main()
{
	char op1[20], op2[20];
	char sum[20];
	char *p, *p1;

	fgets(op1, sizeof(op1), stdin);
	fgets(op2, sizeof(op2), stdin);

    if( (p = strchr(op1, '\n')) != NULL)
		*p = '\0';

    if( (p1 = strchr(op2, '\n')) != NULL)
	    *p1 = '\0';

	binaryAdd(op1, op2);

	return 0;
}

void binaryAdd(char *first, char *second)
{
	int carry = 0;
    int flen = strlen(first);
	int slen = strlen(second);

    char *tfirst = first + strlen(first) - 1;
	char *tsecond = second + strlen(second) - 1;

	int *result = malloc(sizeof(int) * 16);
    int *temp = result;


	for(; flen > 0 || slen > 0; flen--, slen--)
	{
        if((*tfirst - '0') ^ (*tsecond - '0'))
		{
			if(!carry)
			{
				*temp++ = 1 + carry;  
				carry = 0;
			}
			else
				*temp++ = 0;
		}
		else
		{
			if((*tfirst - '0') & (*tsecond -'0'))
			{
				*temp++ = (0 + carry);
				carry = 1;
			}
			else
			{
				*temp++ = (0 + carry);
				carry = 0;
			}
		}
	
		tfirst--;
		tsecond--;
	}

	if (carry == 1)
	{
		*temp++ = carry;
	}
	
    while(temp-- != result)
		printf("%d", *temp);

	free(result);
}
Comments
nice try... next time: [code=c]

why so complicated? all you really need is "strtol()" and the addition operator.

int binaryAdd(char *first, char *second, int *sum)
{
    int val1, val2;
    char *ptr1, *ptr2;
    size_t length;

    val1 = strtol(first,&ptr1,2);
    val2 = strtol(second,&ptr2,2);

    if (ptr1 == first || ptr2 == second)
    {
        printf("\ninvalid entry.\n\n");
        return 0;
    }

    length = ptr1-first;
    if ((ptr2-second) > length)
        length = ptr2-second;

    *sum = val1+val2;

    printf("\n  %*s (%d)\n+ %*s (%d)\n\n= %*s (%d)\n\n",
        length, first, val1, length, second, val2, length, " ", *sum);

    return 1;
}

(The rest is just decoration)

I'll leave conversion of the numeric sum, back into a binary string, as an exercise to the reader :P


.

Comments
"The rest is just decoration" ROFL!! :P

Hi,

Thanks for responding!

I was thinking of doing it at the bit level using the bit operators.

Thanks again,
Tina

at the "bit level", every integer is inherently binary and hex and decimal... it does not matter, because there's only a difference when you print it.

so, you can make it hard if you like, just for the sake of having a challenge or if your instructor requires you to do so for learning purposes.

but if you're not required to make it difficult, i'd say use the <stdlib.h> standard library functions whenever possible.

Well, this isn't at the bitlevel,

you are interpreting the ascii values '0' '1' as bit 0 and bit 1.

If you are interested in this bitlevel stuff,
you should look into the shift operations. like

unsigned char x=7;
unsigned char y=x<<1;
//y is now 7 times 2

But it looks nice your code,
one thing though, you don't need

if (carry == 1)
    *temp++ = carry;
//just
if(carray)

A good exercise is to write you addition program with a non fixed base like,


digit_n = (digit_{n-1}\textrm{ div }base) + (digit_n\textrm{ mod }base)

why so complicated? all you really need is "strtol()" and the addition operator.

int binaryAdd(char *first, char *second, int *sum)
{
    int val1, val2;
    char *ptr1, *ptr2;
    size_t length;

    val1 = strtol(first,&ptr1,2);
    val2 = strtol(second,&ptr2,2);

    if (ptr1 == first || ptr2 == second)
    {
        printf("\ninvalid entry.\n\n");
        return 0;
    }

    length = ptr1-first;
    if ((ptr2-second) > length)
        length = ptr2-second;

    *sum = val1+val2;

    printf("\n  %*s (%d)\n+ %*s (%d)\n\n= %*s (%d)\n\n",
        length, first, val1, length, second, val2, length, " ", *sum);

    return 1;
}

(The rest is just decoration)

I'll leave conversion of the numeric sum, back into a binary string, as an exercise to the reader :P


.

Can u pls explain me where's input: printf("Enter 1st ...
("Enter 2nd binary ...
and output: printf("Result=... ?

i'm looking for a binary addition, without using library, just stdio.h

This article has been dead for over six months. Start a new discussion instead.