#include <iostream>
#include <string>
#include <math.h>
using namespace std;
char* numerounico(char dato[]); //Para transformar cuando es un solo bit
char* numeronegativo(char a[]); //detecta si el numero es negativo
double transformacion(char binario[]);//transforma a decimal el string de binarios
int main(int argc, char* argv[]){
double y; //numero a mostrar
char secuencia_bits[]={"0101"}; //secuencia entrante de bits
if (secuencia_bits[0]=='0'){//detecta si el string de bits es negativo
if (strlen(secuencia_bits)==1){ //detecta si el string es de un solo bit
y=(-2)*transformacion(numerounico(secuencia_bits));
}
else{ //si es mas grande que uno llama a la subfuncion numero negativo
y=(-1)*transformacion(numeronegativo(secuencia_bits));
}
}
else {// El string de bits es positivo
if (strlen(secuencia_bits)==1){ //detecta si es un solo bit
y=2*transformacion(secuencia_bits);
}
else{
y=transformacion(secuencia_bits);//transforma directamente el a decimales
}
}
cout<<y<<endl; //imprime el numero en decimal positivo o negativo
system("PAUSE");
return EXIT_SUCCESS;
}
char* numerounico(char dato[]){ //reemplaza unos por ceros para hacer el complemento cuando es numero unico
if (dato[0]=='0'){
dato[0]='1';
}
else{
dato[0]='0';
}
return dato;
}
char* numeronegativo(char a[]){ //reemplaza uno por ceros cuando es mayor a uno la cadena de caracteres
int i;
double p;
for(i=0;i<strlen(a);i++){
if(a[i]=='0'){
a[i]='1';
}
else if(a[i]=='1'){
a[i]='0';
}
}
return a;
}
double transformacion(char binario[]){ //transforma la cadena de binarios a decimal
int i,j;
double h=0;
for(i=strlen(binario);i>-1;i--){
if(binario[i]=='1'){
j=strlen(binario)-i;
h+=pow(2,j);
}
}
h=h/2;
return h;
}
No hay comentarios:
Publicar un comentario