| | |
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 |
#include adobe api array arrays asterisks binarysearch calculate char cm copyanyfile copyimagefile copypdffile cprogramme creafecopyofanytypeoffileinc createcopyoffile createprocess() csyntax database directory dynamic feet fflush fgets file fork forloop frequency getlasterror givemetehcodez global graphics gtkgcurlcompiling hacking highest homework i/o inches include incrementoperators input interest kernel kilometer km linked linkedlist linux linuxsegmentationfault list locate logical_drives loopinsideloop. match matrix meter microsoft mqqueue mysql number odf open openwebfoundation owf pattern pdf performance pointer posix probleminc process program programming pyramidusingturboccodes radix read recursion recv repetition research scanf scheduling segmentationfault send sequential shape socket socketprograming socketprogramming stack standard string systemcall turboc unix user voidmain() wab win32api windows.h






