Last active
December 27, 2022 16:40
-
-
Save vnkdj5/e118b3b132b203ce1e2a0a3e73789fe6 to your computer and use it in GitHub Desktop.
Calculate 1's, 2's complement and addition of binary numbers using doubly linked list
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include<iostream> | |
using namespace std; | |
class binary; | |
class node | |
{ | |
node *prev; | |
bool n; | |
node*next; | |
public: | |
node() | |
{ | |
prev=next=NULL; | |
} | |
node(bool b) | |
{ | |
n=b; | |
prev=next=NULL; | |
} | |
friend class binary; | |
}; | |
class binary | |
{ | |
node *start; | |
public: | |
binary() | |
{ | |
start=NULL; | |
} | |
void generateBinary(int no); | |
void displayBinary(); | |
void onesComplement(); | |
void twoscomplement(); | |
binary operator +(binary n1); | |
bool addBitAtBegin(bool val) | |
{ | |
node *nodee=new node(val); | |
if(start==NULL) | |
{ | |
start=nodee; | |
} | |
else | |
{ | |
nodee->next=start; | |
start->prev=nodee; | |
start=nodee; | |
} | |
return true; | |
} | |
}; | |
void binary::generateBinary(int no) | |
{ | |
bool rem; | |
node *p; | |
rem=no%2; | |
start=new node(rem); | |
no=no/2; | |
while(no!=0) | |
{ | |
rem=no%2; | |
no=no/2; | |
/* | |
if(start==NULL) | |
{ | |
start=new node(rem); | |
// cout<<" Start prev: "<<start->prev; | |
// cout<<" Start next: "<<start->next ; | |
} | |
else | |
{ | |
*/ | |
p=new node(rem); | |
p->next=start; | |
start->prev=p; | |
// cout<<" Start prev: "<<start->prev->n; | |
// cout<<" p->n"<<p->n; | |
start=p; | |
//} | |
} | |
} | |
void binary::displayBinary() | |
{ | |
node *t; | |
t=start; | |
while(t!=NULL) | |
{ | |
cout<<t->n; | |
t=t->next; | |
} | |
} | |
void binary::onesComplement() | |
{ | |
node *t; | |
t=start; | |
while(t!=NULL) | |
{ | |
if(t->n==0) | |
t->n=1; | |
else | |
t->n=0; | |
t=t->next; | |
} | |
} | |
binary binary::operator +(binary n1) | |
{ | |
binary sum; | |
node *a=start; | |
node *b=n1.start; | |
// bit *s=sum.start; | |
bool carry=false; | |
while(a->next!=NULL) | |
a=a->next; | |
while(b->next!=NULL) | |
b=b->next; | |
while(a!=NULL && b!=NULL) | |
{ | |
sum.addBitAtBegin((a->n)^(b->n)^carry); | |
carry=((a->n&& b->n) || (a->n&& carry) || (b->n && carry)); | |
a=a->prev; | |
b=b->prev; | |
} | |
while(a!=NULL) | |
{ | |
sum.addBitAtBegin(a->n^carry); | |
a=a->prev; | |
} | |
while(b!=NULL) | |
{ | |
sum.addBitAtBegin(b->n^carry); | |
b=b->prev; | |
} | |
sum.addBitAtBegin(carry); | |
return sum; | |
} | |
void binary::twoscomplement() | |
{ | |
onesComplement(); | |
bool carry=1; | |
node *t; | |
t=start; | |
while(t->next!=NULL) | |
{ | |
t=t->next; | |
} | |
while(t!=NULL) | |
{ | |
if(t->n==1&& carry==1) | |
{ | |
t->n=0; | |
carry=1; | |
} | |
else | |
if(t->n==0&& carry==1) | |
{ | |
t->n=1; | |
carry=0; | |
} | |
else | |
if(carry==0) | |
break; | |
t=t->prev; | |
} | |
displayBinary(); | |
} | |
int main() | |
{ | |
int num,num1; | |
binary n1,n3,n2; | |
int choice=1; | |
do | |
{ | |
cout<<"\n\n=========Binary Number Operations========\n"; | |
cout<<"1. Generate binary\n2.One's Complement\n3.Two's Complement\n4. Addition\n0.Exit\nEnter your choice: "; | |
cin>>choice; | |
switch(choice) | |
{ | |
case 1: cout<<"\nENter Number in decimal form: "; | |
cin>>num; | |
n1.generateBinary(num); | |
cout<<"\nBinary Representation: "; | |
n1.displayBinary(); | |
break; | |
case 2:cout<<"\nENter Number in decimal form: "; | |
cin>>num; | |
n1.generateBinary(num); | |
cout<<"\nBinary Representation: "; | |
n1.displayBinary(); | |
cout<<"\nOnes Complement: "; | |
n1.onesComplement(); | |
n1.displayBinary(); | |
break; | |
case 3:cout<<"\nENter Number in decimal form: "; | |
cin>>num; | |
n1.generateBinary(num); | |
cout<<"\nBinary Representation: "; | |
n1.displayBinary(); | |
cout<<"\nTwos complement; "; | |
n1.twoscomplement(); | |
break; | |
case 4: cout<<"\nENter Two Numbers: "; | |
cin>>num>>num1; | |
n1.generateBinary(num); | |
n2.generateBinary(num1); | |
n1.displayBinary(); | |
cout<<" + "; | |
n2.displayBinary(); | |
cout<<"= "; | |
n3=n1+n2; | |
n3.displayBinary(); | |
} | |
}while(choice!=0); | |
n1.generateBinary(7); | |
cout<<"\nBinary Representation: "; | |
n1.displayBinary(); | |
// | |
// cout<<"\nOnes Complement: "; | |
// n1.displayBinary(); | |
cout<<"\nTwos complement; "; | |
n1.twoscomplement(); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment