| | |
Binary addition in C
![]() |
•
•
Join Date: Oct 2007
Posts: 6
Reputation:
Solved Threads: 0
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
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
c Syntax (Toggle Plain Text)
#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); }
Last edited by Ancient Dragon; May 28th, 2009 at 11:49 pm. Reason: corrected code tags
why so complicated? all you really need is "strtol()" and the addition operator.
(The rest is just decoration)
I'll leave conversion of the numeric sum, back into a binary string, as an exercise to the reader
.
c Syntax (Toggle Plain Text)
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

.
Last edited by jephthah; May 29th, 2009 at 12:00 am.
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.
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.
•
•
Join Date: Aug 2008
Posts: 149
Reputation:
Solved Threads: 8
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
But it looks nice your code,
one thing though, you don't need
A good exercise is to write you addition program with a non fixed base like,
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
c++ Syntax (Toggle Plain Text)
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
c++ Syntax (Toggle Plain Text)
if (carry == 1) *temp++ = carry; //just if(carray)
A good exercise is to write you addition program with a non fixed base like,
![]() |
Similar Threads
- Arrays and Bitwise (C++)
- beginner c++ programmer (C++)
- decimal to binary in while loop..stuck (C++)
- Gets all information in listView into a binary file/String variables/textBox in VC++ (C++)
- Adding 1 with 1 in binary (Python)
- Adding binary numbers (C++)
- binary integer logic (IT Professionals' Lounge)
- Can someone please help me with Binary Addtion. (C++)
- binary trees (C)
Other Threads in the C Forum
- Previous Thread: Memory moving with 2 pointers
- Next Thread: Difference betn getch(),getche(),getchar() functions
| Thread Tools | Search this Thread |
* adobe ansi api array asterisks binarysearch calculate centimeter changingto char character cm convert copyimagefile cprogramme creafecopyofanytypeoffileinc createcopyoffile csyntax database directory feet fflush fgets file fork forloop frequency givemetehcodez grade graphics gtkgcurlcompiling gtkwinlinux hacking highest histogram homework i/o inches infiniteloop input intmain() iso kernel keyboard km linked linkedlist linux linuxsegmentationfault list locate looping loopinsideloop. lowest match microsoft mqqueue mysql number oddnumber odf open opendocumentformat owf pattern pdf performance posix probleminc process program programming radix recv recvblocked repetition research reversing scanf scheduling segmentationfault send sequential socket socketprograming stack standard string systemcall threads turboc unix user variable voidmain() wab whythiscodecausesegmentationfault windows.h windowsapi






