#include #include int add(int input1,int input2); int mul(int input1,int input2); int div(int input1,int input2); void bin(int input1); int overflow; void main() { overflow=0; int a1,a2; int cal; int result; printf("what's your operation?\n1-add/ 2-subtract/ 3-multiply/ 4-divide / 5-binary\n"); scanf("%d",&cal); printf("first number"); scanf("%d",&a1); if(cal==5) { bin(a1); } else{ printf("second number"); scanf("%d",&a2); switch(cal) { case 1: ADD: result=add(a1,a2); break; case 2: a2=~a2; a2=add(a2,1); goto ADD; case 3: result=mul(a1,a2); break; case 4: result=div(a1,a2); break; } if(overflow==1) printf("overflow\n"); else printf("%d",result); } } int add(int input1,int input2) { int now=input1; int cin=input2; int cout=0; do{ cout = cin&now; now = cin^now; cin = cout<<1; }while(cout!=0); if((input1^input2)>0) if((input1^now)<0) overflow=1; return now; } int mul(int input1,int input2) { int sum=0; int temp; int sumtemp; if(input2<0) { input2=abs(input2); input1=~input1; input1=add(input1,1); } if((input2&1)==1) { sum=~input1; sum=add(sum,1); } goto START; do { sumtemp=input1<<1; if((sumtemp^input1)<0) { if(input2==1) { sum=add(sum,input1); sum=add(sum,input1); } else overflow=1; break; } temp=input2&3; if(temp==1) goto ADD; else if(temp!=2) goto NEXT; sumtemp=~sumtemp; sumtemp=add(sumtemp,1); ADD : sum=add(sum,sumtemp); NEXT : input2=input2>>1; input1=input1<<1; START : ; }while(input2!=0); return sum; } int div(int input1,int input2) { int sign=0; int rem=0; sign=(input1^input2)<0; input1=abs(input1); input2=abs(input2); int copy=~input2; copy=add(copy,1); int temp; goto START; do{ input2=temp; START: temp=input2<<1; if(temp<0) break; }while(input1>temp); input2=~input2; input2=add(input2,1); goto START2; do { rem=rem<<1; input2=input2>>1; START2: temp=add(input1,input2); if(temp>=0) { rem=rem|1; input1=temp; } }while(input2!=copy); if(sign==1) { rem=~rem; rem=add(rem,1); } return rem; } void bin(int input1) { int temp; int pointer=1; goto START; do{ pointer=temp; START: temp=pointer<<1; if(temp<0) break; }while(input1>=temp); do{ if((input1&pointer)==pointer) printf("1"); else printf("0"); pointer=pointer>>1; }while(pointer!=0); }