
23/09/2004, 12:15
|
| | Fecha de Ingreso: diciembre-2002
Mensajes: 23
Antigüedad: 22 años, 2 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 |