without used trackid the solucionar solucion refreshing page method descargar como chrome another javascript bit-manipulation bitwise-operators infinity bitwise-or

javascript - used - void(0) trackid=sp-006



¿Por qué es(Infinity | 0)=== 0? (2)

Hacer matemáticas y otras operaciones que esperan números enteros con NaN e Infinity suele ser una mala idea. ¿Cómo configurarías / eliminarías un poco de Infinity ?

En realidad, las operaciones a nivel de bits solo se definen para enteros, y los enteros no tienen NaN ni Infinity .

Estoy jugando con operadores bitwise en JavaScript y hay una cosa que me parece notable.

El operador bit a bit devuelve 1 como bit de salida si uno de los dos bits de entrada es 1 . Así que haciendo x | 0 x | 0 siempre devuelve x , porque | 0 | 0 no tiene efecto:

  • ( 1 | 0 ) === 1
  • ( 0 | 0 ) === 0

Sin embargo, cuando calculé el Infinity | 0 Infinity | 0 , tengo 0 . Esto es sorprendente en mi opinión, porque por lo anterior uno debe obtener Infinity . Después de todo, ( x | 0 ) === x .

No puedo encontrar dónde está definido explícitamente en la especificación ECMAscript, así que me preguntaba qué implica exactamente que ( Infinity | 0 ) === 0 . ¿Es tal vez la forma en que Infinity se almacena en la memoria? Si es así, ¿cómo puede ser que hacer un | 0 | 0 operación hace que devuelva 0 mientras que | 0 | 0 no debe hacer nada?


Los operadores bitwise trabajan solo en números enteros.
Infinity es un valor de punto flotante, no un entero.

La especificación says que todos los operandos de las operaciones bitwise se convierten en enteros (usando la operación ToInt32 ) antes de realizar la operación.

La operación ToInt32 dice:

Si el número es NaN, +0, −0, + ∞ o –∞ devuelve +0.