javascript - 如何将按位运算应用于 JS 数字的实际 IEEE 754 表示?

标签 javascript bit-manipulation bitwise-operators ieee-754

在 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

之后你可以将 w1w2 中的 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/

相关文章:

c - 如何通过位移位将无符号整数转换为负数?

javascript - javascript中变量的作用域

algorithm - 切换除最高设置位之后的所有位

sql - 将按位数据转换为多列

javascript - 如何找到第一个设置位的索引

Java 从 int var 获取第一个和最后一个 2 字节

c++ - 了解使用 ^= 反转字符串的 C++ 函数

javascript - 无法从serializeArray获取php mysql更新

javascript - fetch() 完成后如何调用函数

JavaScript 对象文字和 jQuery $(类)