2

me encuentro realizando un app con flutter, una Calculadora de Subneteo de Redes con la técnica FLSM, y en el proceso se manejan muchos números binarios, pero al momento de querer realizar una operación entre binarios, no logré hallar una forma directa de hacerlo con Dart, a continuación les muestro un pequeño ejemplo de como lo intenté hacer:

void main() {
  var a = 00011111;
  var b = 31;
  var c = '00011111';

  var testA = a + 1;
  var testB = b + 1;
  var testC = int.parse(c, radix: 2) + 1;

  var binA = BigInt.from(testA).toUnsigned(8).toRadixString(2).padLeft(8, "0");
  var binB = BigInt.from(testB).toUnsigned(8).toRadixString(2).padLeft(8, "0");
  var binC = BigInt.from(testC).toUnsigned(8).toRadixString(2).padLeft(8, "0");

  print('test A: ' + testA.toString() + '\tbinary: ' + binA);
  print('test B: ' + testB.toString() + '\tbinary: ' + binB);
  print('test C: ' + testC.toString() + '\tbinary: ' + binC);
}

La operación es simplemente sumar uno al valor inicial, pero hacerlo en binario, y devolver el resultado en binario igualmente, este es el resultado del algoritmo:

Muestra los resultados del test .

Como se muestra, la forma A está descartada, asume el binario como un decimal y continúa con la suma, la forma B y C llegan al resultado pero ambos también requieren del número convertido en decimal para realizar la operación y luego volver a convertirlo en binario.

Actualmente utilizo el método C ya que cuento con los valores en binario, sin embargo me gustaría saber como se pueden realizar operaciones entre binarios con Dart, que tipo de variable se utiliza o si no existe ninguna, o si se puede simular utilizando listas o algo similar, de antemano muchas gracias.

1 Answers1

1

Estás teniendo una confusión con los valores literales y su valor numérico.

Que un número esté compuesto de ceros y unos no lo hace binario, lo que hace que un número sea binario es su base numérica: cien en base diez 10010 no tiene el mismo valor que cien en base dos 1002.

Cuando escribes un literal numérico, se asume que su base es diez:

var a = 00011111;

La variable a contiene 1111110 no 111112 por lo que al sumar uno no obtienes 1000002 si no 1111210.


No he podido ver que en se puedan escribir literales binarios, así que tu única opción es int.parse, tal y como haces en tu variable c.

PaperBirdMaster
  • 44,474
  • 6
  • 44
  • 82