JS-4 bytes a un número de punto flotante de precisión simple

Tipo de datos JS

JSEs un lenguaje de tipo débil. Sus tipos de datos incluyen valores de cadena, valores numéricos, valores booleanos, matrices y objetos. Aunque nuestros tipos numéricos incluyen enteros en coma flotante, etc., aquí se los denomina colectivamente 数值类型. Al mismo tiempo JavaScripttiene un tipo dinámico, sin especificar cuándo definimos el tipo de datos de la variable. Esto también significa que nuestra conversión forzada no será válida en JS.

Si C/C++se puede lograr mediante la conversión de memoria o complejo. Pero JavaScriptestos métodos son ineficaces (también, o no sé cómo girar demasiado cai).

IEEE754Ahora se reconoce como la operación de conversión de punto flotante estándar más utilizada, por muchos CPUutilizados por la unidad de punto flotante.

IEEEE475

Luego miramos primero IEEEE475el Floatformato, hay 32bitpara el almacenamiento de datos, específico dividido de la siguiente manera:

Inserte la descripción de la imagen aquí
Aquí tomamos 0x4128BC90como ejemplo para explicar:

0x4128BC90(H) = 01000001001010001011110010010000(B)

Signo (bit de signo)

  • 0 Mostrar número positivo
  • 1 Representa un número negativo

Exponente (exponente bit)

1000 0010(B) = 130 (D)

Significand (lugares decimales)

01010001011110010010000(B) = 0*2^(-1) + 1*2^(-2) + ... + 0*2^(-23)

Fórmula de conversión

F un (x) = (- 1) S ign × (1 + S ignificando) × (2) E xponente - 127 Fun (x) = (-1) ^ {Sign} \ times (1 + Significando) \ times ( 2) ^ {Exponente - 127} F u n ( x )=( - 1 )S i g n×( 1+S i g n i f i c a n d )×( 2 )E x p o n e n t - 1 2 7

Método de conversión

var bytes = new Array();

bytes[0] = 65;
bytes[1] = 40;
bytes[2] = 188;
bytes[3] = 144;

//IEEE754
function hex2float(num) {
    
    
  	//符号位
    var sign = (num & 0x80000000) ? -1 : 1;
  	//指数位
    var exponent = ((num >> 23) & 0xff) - 127;
  	//尾数位
    var mantissa = 1 + ((num & 0x7fffff) / 0x7fffff);
    return sign * mantissa * Math.pow(2, exponent);
}

//拼接为number对象
var mfloat = ((bytes[0] & 0xFF) << 24) | 
	((bytes[1] & 0xFF) << 16) | 
	((bytes[2] & 0xFF) << 8) | 
	(bytes[3] & 0xFF);

console.log(hex2float(mfloat));

Herramientas online

Las siguientes son dos herramientas en línea que recomiendo personalmente y que son muy adecuadas para la verificación:

Flotante (IEEE754 de precisión simple de 32 bits)

Conversor base en línea_ conversión de punto flotante

Referencia gracias

Conversión de hexadecimal a flotante en javascript

Fundamentos informáticos: conversión de números de punto flotante estándar IEEE754

Supongo que te gusta

Origin blog.csdn.net/weixin_40774605/article/details/107323049
Recomendado
Clasificación