BigInt es un tipo de dato de Javascript que nace con la idea de permitir representar valores muy grandes, de
una
forma relativamente sencilla y compatible con lo que ya existe.
La problemática que existe actualmente con el tipo de dato Number es que valores más grandes de 253-1 no pueden ser
representados, ya que superarían el límite seguro Number.MAX_SAFE_INTEGER y algunos resultados podrían perder
precisión, como se puede ver en el siguiente ejemplo:
Ejemplo
const number = 2 ** 53
number.constructor.name; // "Number" (Es de tipo Number);
number; // 9007199254740992;
number + 1; // 9007199254740992;
number + 5; // 9007199254740996;
number + 40; // 9007199254741032;
Para poder realizar estas tareas de forma segura, podemos utilizar el tipo de dato BigInt simplemente añadiendo una n
al final del número:
Ejemplo
const number = 2n ** 53n;
number.constructor.name; // "BigInt" (Es de tipo BigInt)
number; // 9007199254740992n
number + 1n; // 9007199254740993n
number + 5n; // 9007199254740997n
number + 40n; // 9007199254741032n
...
Crear un Bigint
Para crear un BigInt, agregue n al final de un número entero o llame BigInt():
Ejemplo
let x = 15;
let y = 15n;
Métodos de BigInt
El tipo de dato BigInt tiene dos métodos estáticos, que nos pueden servir para operar a nivel de bits.
Disponemos de
los métodos .asIntN() y .asUintN():
Método
Descripción
BigInt.asIntN(bits, bigNumber)
Ajusta bigNumber a bits (devuelve entero con signo).
BigInt.asUintN(bits, bigNumber)
Ajusta bigNumber a bits (devuelve entero sin signo).
En primer lugar, .asIntN() significa as (Signed) Integer Number. En el ejemplo vamos a usar 2
bits para representar
un número con signo. Con 2 bits podemos representar 00, 01, 10 y 11, por lo que sólo podemos
representar 4 números
(en nuestro caso desde -2 hasta 1):
Ejemplo
// Con 2 bits con signo puedes representar desde (-2 hasta 1)
BigInt.asIntN(2, -3n); // -3n (Representa el -3 con 2 bits) ❌
BigInt.asIntN(2, -2n); // -2n (Representa el -2 con 2 bits) ✅ 10
BigInt.asIntN(2, -1n); // -1n (Representa el -1 con 2 bits) ✅ 11
BigInt.asIntN(2, 0n); // 0n (Representa el 0 con 2 bits) ✅ 00
BigInt.asIntN(2, 1n); // 1n (Representa el 1 con 2 bits) ✅ 01
BigInt.asIntN(2, 2n); // -2n (Representa el 2 con 2 bits) ❌
BigInt.asIntN(2, 3n); // -1n (Representa el 3 con 2 bits) ❌
En segundo lugar, .asUintN significa as Unsigned Integer Number. En el ejemplo vamos a usar 2 bits para representar
un número sin signo. Con 2 bits podemos representar 00, 01, 10 y 11, y como no tenemos signo y no debemos
preocuparnos de los números negativos, tenemos más disponible para los números positivos. Podremos representar 4
números (en nuestro caso desde 0 hasta 4):
Ejemplo
// Con 2 bits sin signo puedes representar desde (0 hasta 4)
BigInt.asUintN(2, -2n); // 2n (Representa el -2 con 2 bits) ❌
BigInt.asUintN(2, -1n); // 3n (Representa el -1 con 2 bits) ❌
BigInt.asUintN(2, 0n); // 0n (Representa el 0 con 2 bits) ✅ 00
BigInt.asUintN(2, 1n); // 1n (Representa el 1 con 2 bits) ✅ 01
BigInt.asUintN(2, 2n); // 2n (Representa el 2 con 2 bits) ✅ 10
BigInt.asUintN(2, 3n); // 3n (Representa el 3 con 2 bits) ✅ 11
BigInt.asUintN(2, 4n); // 0n (Representa el 4 con 2 bits) ❌
Operadores BigInt
Operadores que se pueden usar en un JavaScript Number también se puede utilizar en un BigInt.
ejemplo
let x = 9007199254740995n;
let y = 9007199254740995n;
let z = x * y;
Salida: 81129638414606735738984533590025
Aritmética entre un BigInt y un Numberno está permitido (la conversión de tipo pierde información).
El desplazamiento a la derecha sin signo (>>>) no se puede realizar en un BigInt (no tiene un ancho fijo).
Decimales BigInt
BigInt no puede tener decimales.
ejemplo
let x = 5n;
let y = Number(x) / 2;
Salida:2.5
BigInt hexadecimal, octal y binario
BigInt también se puede escribir en notación hexadecimal, octal o binaria:
let hex = 0x20000000000003n;
let oct = 0o400000000000000003n
let bin = 0b100000000000000000000000000000000000000000000000000011n;
0 Comentarios
Si desea contactar comigo, lo puede hacer atravez deste formulario gracias