在 JavaScript 中,无论何时执行按位运算,例如 x << 2
,在实际发生移位之前,64 位浮点表示形式被转换为 32 位无符号整数。我对将移位应用于实际的、未更改的 IEEE 754 按位表示感兴趣。
这怎么可能?
最佳答案
您可以先尝试将 JSNumber 转换为字节/整数,然后自己移动结果。
使用最新版本的主要浏览器中可用的 TypedArray 内容:
var f = new Float64Array( 1 ); // creating typed array to contain single 64-bit IEEE754
f.set( [ 1.0 ], 0 ); // transferring JSNumber for untyped array to first element of typed one
var d = new DataView( f.buffer ); // creating raw view on content in typed array
var w1 = d.getUint32( 0 ); // accessing bytes 0 to 3 of typed array
var w2 = d.getUint32( 4 ); // accessing bytes 4 to 7 of typed array
之后你可以将 w1
和 w2
中的 32 位字分别移动到低位字的高 2 位到高位字的低 2 位。
使用 d.getUint32()
的第二个参数可以控制字节顺序。
阅读更多:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays
只是为了确保正确识别 Bergi 的评论。我的所有代码可能会像这样缩减为单行代码:
var d = new Uint32Array( new Float64Array( [1.0] ).buffer );
d[0]
和 d[1]
适合访问包含的 32 位字,那么。
关于javascript - 如何将按位运算应用于 JS 数字的实际 IEEE 754 表示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24564460/