Me pregunto si el complemento bit a bit (NO) de la representación binaria de un número de coma flotante de un número es el mismo número pero con un cambio en su signo.
Gracias a todas las posibles referencias a artículos o documentación.
Los números de punto flotante IEEE 754 se representan como un signo, una mantisa y un exponente.
Es posible trabajar con flotadores a un nivel de bits, pero necesita saber lo que está haciendo .
Aquí hay algunos documentos que explican más.
No estoy seguro de lo que quieres decir con "bit a bit". Hay muchas operaciones bit a bit. Las opciones lógicas son complemento a uno/NO bit a bit (suposición de nombre falso) o complemento a dos (cambia el signo por enteros con signo). Las opciones menos lógicas son OR, AND, XOR y sus complementos NOR, NAND, XNOR. Ninguno de estos producirá el resultado deseado para un número de punto flotante.
Como puede ver en el bonito diagrama de Joby, el primer bit es el bit de signo, luego el exponente (sesgado) ocupa 8 bits, luego la mantisa. Lo que quieres hacer es XOR el bit de signo:
FloatingPointNumber ^ 0x80000000 == -(FloatingPointNumber)
Esa constante asume que estás usando flotantes de 32 bits. Deberá agregar otros 8 ceros al final de la constante para un número de tipo doble.
No, no es.
Puede probarlo aquí: http://babbage.cs.qc.edu/IEEE-754/32bit.html
Por ejemplo, puede ingresar el número de la página de wikipedia binary32 :
00111110 00100000 00000000 00000000 binary = 3E200000 hex
y verás que en realidad es 0.15625 decimal.
Cuando ahora ingresa el NOT bit a bit (complemento de unos) de esa representación binaria:
11000001 11011111 11111111 11111111 binary = C1DFFFFF hex
verás que es -27.999998092651367 .
No, es basura. Los puntos flotantes tienen una estructura interna compleja, por lo que no puedes hacer eso.
Puede hacer algunas manipulaciones en la mantisa, pero no en números enteros.
El resultado de invertir todos los bits de un flotador f puede verse como una aproximación cruda de -4.0/f. Esto funciona porque los tres elementos del flotador se comportan de manera predecible:
-el bit de signo está invertido
-el exponente está invertido, justo por un factor de uno
-la nueva mantisa se convierte en un áspero 3 - mantisa (¡cuidado con el bit oculto que siempre es uno!)
Ejemplo:
hexadecimal: 0x3F800000
signo: +
exponente: 127
mantisa: 1,00000000000000000000000 (binario) = 1,0
valor decimal: + 2**(127-127) * 1,0 = 1,0
Con cada bit invertido:
hexadecimal: 0xC07FFFFF
signo: -
exponente: 128
mantisa: 1,111111111111111111111 (binario) = 1,99999
valor decimal: - 2**(128-127) * 1,99999 = -3,999999
connor lobo
peterstone
connor lobo
vicatcu