with number cast javascript numbers tostring

number - undefined to string javascript



NĂºmeros negativos a cadenas binarias en JavaScript (3)

Respuesta corta:

  1. La función toString() básicamente toma el decimal, lo convierte en binario y agrega un signo "-".

  2. Un desplazamiento a la derecha con cero relleno convierte su operando a un entero de 32 bits con signo en formato de dos complementos.

Una respuesta más detallada:

Pregunta 1:

//If you try (-3).toString(2); //show "-11"

Está en la función .toString() . Cuando saca un número a través de .toString() :

Sintaxis

numObj.toString ([raíz])

Si el numObj es negativo, el signo se conserva. Este es el caso incluso si la raíz es 2; la cadena devuelta es la representación binaria positiva de la numObj precedida por un signo -, no el complemento de dos de la numObj.

Así que, básicamente, toma el decimal, lo convierte en binario y agrega un signo "-".

  1. La base 10 "3" convertida a la base 2 es "11"
  2. Agregar un signo nos da "-11"

Pregunta 2:

// but if you fake a bit shift operation it works as expected (-3 >>> 0).toString(2); // print "11111111111111111111111111111101"

Un desplazamiento a la derecha con cero relleno convierte su operando a un entero de 32 bits con signo .

Los operandos de todos los operadores bit a bit se convierten en enteros de 32 bits con signo en formato de complemento a dos.

¿Alguien sabe por Number.toString función javascript Number.toString no representa números negativos correctamente?

//If you try (-3).toString(2); //shows "-11" // but if you fake a bit shift operation it works as expected (-3 >>> 0).toString(2); // print "11111111111111111111111111111101"

Tengo curiosidad por saber por qué no funciona correctamente o cuál es el motivo por el que funciona de esta manera. Lo busqué pero no encontré nada que ayude.



var binary = (-3 >>> 0).toString(2); // coerced to uint32 console.log(binary); console.log(parseInt(binary, 2) >> 0); // to int32

en jsfiddle

salida es

11111111111111111111111111111101 -3