Además binario de 2 valores representados como cadenas
Pregunta
Tengo dos cadenas:
string a = "00001"; /* which is decimal 1 I've converted with next string:
string a = Convert.ToString(2, 2).PadLeft(5, '0'); */
string b = "00010";
Quiero realizar la adición binaria entre los dos por lo que la respuesta será 00011 (3).
Solución
System.Convert debe ser capaz de hacer el trabajo por usted
int number_one = Convert.ToInt32(a, 2);
int number_two = Convert.ToInt32(b, 2);
return Convert.ToString(number_one + number_two, 2);
(puede que tenga que afinar las cuerdas de un bit)
Otros consejos
Usted lo hace del mismo modo que lo haría en papel. Empezar desde la derecha, izquierda. si A [i] + B [i] + llevar> = 2, carry permanece 1 y seguir adelante. Si no, escribir A [i] + B [i] + transportar y fijar carry a 0.
a = "00001"; b = "00010";
carry = 0; una [4] + b [4] + llevar a = 1, escribir 1, establecer carry = 0: 00001
a [3] + b [3] + llevar a = 1, escribir 1, establecer carry = 0: 00011
Y así sucesivamente.
private static bool[] BinaryAdd(bool[] originalbits, long valuetoadd)
{
bool[] returnbits = new bool[originalbits.Length];
for (long i = 0; i <= valuetoadd - 1; i++)
{
bool r = false; //r=0
for (long j=originalbits.Length-1;j<=originalbits.Length;j--)
{
bool breakcond = false;
bool o1 = originalbits[j];
if (r == false)
{
if (o1 == false) { o1 = true; breakcond = true; }//break
else if (o1 == true) { o1 = false; r = true; }
}
else
{
if (o1 == false) { o1 = true; breakcond = true; }//break
else if (o1 == true) { o1 = false; r = true; }
}
originalbits[j] = o1;
if (breakcond == true)
{
break;
}
}
}
returnbits = originalbits;
return returnbits;
}
Yo recomendaría a analizar los datos enteros y luego la adición de ellos, a continuación, dar salida al resultado como binario.
Muy fácil -. Escribir una tabla de consulta para 'adición' de caracteres binarios, no se olvide de llevar si es necesario, y me envía el 50% del crédito que se obtiene por el trabajo
var sum = Convert.ToString(Convert.ToInt32("00010", 2) + Convert.ToInt32("00001", 2), 2).PadLeft(5, '0');
"00011"
PadLeft no es realmente necesario, pero si las cuerdas tienen longitud diferente que obtendría un mismo formato. Ejemplo:
var sum = Convert.ToString(Convert.ToInt32("0000010", 2) + Convert.ToInt32("001", 2), 2).PadLeft(5, '0');
"00011"