#include <stdio.h> #include <process.h>
int add (int a,int b) { int i=0,j=0,c=0; for(i=0,j=0;i<15;++i){ if( ((a&1) & (b&1)) | ((a&1) & (j)) | ((b&1) & (j)) ){ if( (a&1) & (b&1) & j) c|=0x4000; j=1; } else{ if( (a&1) | (b&1) | j) c|=0x4000; j=0; } if(i<14){ c>>=1; a>>=1; b>>=1; } } a>>=1; b>>=1; if(j^(a&1)^(b&1)) c|=0x8000; return c; }
int sub (int a,int b) { return add(a,add(~b,1)); }
int mul(int a,int b) { int c=0; int sign=(((a&0x8000) ^ (b&0x8000)) >>15) & 0x0001; if(a<0) a=add(~a,1); if(b<0) b=add(~b,1); while(b>0){ if(b&1){ c=add(c,a); b=sub(b,1); } else{ a<<=1; b>>=1; } } if(sign) c=add(~c,1); return c; }
int div(int a,int b) { int i=0; int sign=(((a&0x8000) ^ (b&0x8000)) >>15) & 0x0001; if(b==0){ printf("error\n"); exit(0); } if(a<0) a=add(~a,1); if(b<0) b=add(~b,1); if(sign && a!=0) printf("-"); while(a>=b){ a=sub(a,b); i=add(i,1); } printf("%d",i); if(a!=0){ printf("."); a=mul(a,10); i=0; while(a>=b){ a=sub(a,b); i=add(i,1); } printf("%d",i); } return 0; } void main() { printf("\n%d %d %d ",add(3,5),sub(5,3),mul(3,5)); div(9,0); }
----------------解决方案--------------------------------------------------------