-
- #include "stdio.h"
- #include "math.h"
- #define N 18
- void dtob(unsigned int, int*, char*);
- unsigned int btod(int*);
- void badd(int*, int*, int*);
- void show(int*, char*);
- void main()
- {
- unsigned int x, y;
- static int xb[N], yb[N], resultb[N], i;
- printf("input the decimal value X and Y:");
- scanf("%d %d", &x, &y);
- dtob(x, xb, "X");
- dtob(y, yb, "Y");
- badd(xb, yb, resultb);
- printf("/nResult convert to be decimal is:%4d/n", btod(resultb));
- }
- void dtob(unsigned int n, int *nb, char *s)
- {
- int i = N;
- while(n)
- {
- nb[--i] = n & 1;
- n >>= 1;
- }
- nb[--i] = -1;
- show(nb, s);
- }
- void badd(int *xb, int *yb, int *resultb)
- {
- int i = 0;
- while(xb[i] != -1 && yb[i] != -1)
- i++;
- resultb[i++] = -1;
- for(; i < N; i++)
- {
- if(xb[i] == -1)
- resultb[i] = yb[i];
- else if(yb[i] == -1)
- resultb[i] = xb[i];
- else
- resultb[i] = xb[i] + yb[i];
- }
- for(i = N; resultb[i] != -1; i--)
- {
- if(resultb[i] > 1)
- {
- resultb[i] %= 2;
- if(resultb[i-1] == -1)
- {
- resultb[i-1] = 1;
- resultb[i-2] = -1;
- }
- else
- resultb[i-1] += 1;
- }
- }
- show(resultb, "Result");
- }
- unsigned int btod(int* nb)
- {
- static unsigned int i, sum;
- for(; nb[i] != -1; i++);
- for(++i; i < N; i++)
- sum += nb[i]*(int)pow(2, N-1-i);
- return sum;
- }
- void show(int *nb, char *s)
- {
- int i;
- printf("/n%s/t= ", s);
- for(i = 0; nb[i] != -1; i++);
- for(++i; i < N; i++)
- printf("%d", nb[i]);
- }