Ver Mensaje Individual
  #6 (permalink)  
Antiguo 23/09/2004, 12:15
rir3760
 
Fecha de Ingreso: diciembre-2002
Mensajes: 23
Antigüedad: 21 años, 5 meses
Puntos: 0
Para realizar una suma:

Código:
#include <stdio.h>
#include <stdlib.h>

#define NUM_BITS 8

int readline(char num[][NUM_BITS]);
void binarysum(char num[][NUM_BITS], char result[]);

int main(void){
   
   char num[2][NUM_BITS], result[NUM_BITS+1];
   int i, j;
   
   if (readline(num)){
      
      binarysum(num, result);
      
      puts("");
      for (i = 0; i < 2; i++){
         printf(" ");
         for (j = 0; j < NUM_BITS; j++)
            printf("%c", '0' + num[i][j]);
         printf("\n");
      }
      
      for (j = 0; j < NUM_BITS+1; j++)
         printf("%c", '0' + result[j]);
      printf("\n");
      
      return EXIT_SUCCESS;
   }else{
      puts("Invalid input - binary numbers must contain between 1-8 characters");
      
      return EXIT_FAILURE;
   }
   
}

int readline(char num[][NUM_BITS]){
   
   int c, i, j, k;
   
   for (i = 0; i < 2; i++){
      j = 0;
      while (j < NUM_BITS && (c = getchar()) != EOF && (c == '0' || c == '1'))
            num[i][j++] = c - '0';
      
      if (j == NUM_BITS)
         getchar();
      
      if (j == 0){
         return 0;
      }else{
         for (k = NUM_BITS; k > 0; k--)
            num[i][k-1] = (j >= 1) ? num[i][--j] : 0;
      }
   }
   return 1;
   
}

void binarysum(char num[][NUM_BITS], char result[]){
   
   int i, bit_1, bit_2, carry_flag = 0;
   
   for (i = NUM_BITS; i > 0; i--){
      bit_1 = num[0][i-1];
      bit_2 = num[1][i-1];
      
      result[i] = bit_1 ^ bit_2 ^ carry_flag;
      carry_flag = (bit_1 & bit_2) | (bit_1 & carry_flag) | (bit_2 & carry_flag);
   }
   result[i] = carry_flag;
   
}
Para restar sumas el primer numero con el 'complemento a dos' del segundo.

Saludos