javascript中number类型以ieee 754双精度浮点格式存储,可通过parseint(str,2)/tostring(2)转换二进制字符串,位运算时转为32位整数,获取64位布局需float64array+uint8array,大整数应使用bigint避免精度丢失。

JavaScript 的 Number 类型本身不直接存储二进制数据,它用双精度浮点格式(IEEE 754)表示数值,但可以通过字符串、位运算和 TypedArray 等方式实现二进制数据与数字之间的转换。关键在于区分“二进制字符串”、“二进制位操作”和“底层字节表示”三种常见场景。
二进制字符串 ↔ Number 的相互转换
这是最常用的操作:把形如 "1010" 的二进制字符串转为十进制数,或把数字转回二进制字符串表示。
- 字符串转数字:使用
parseInt(str, 2),第二个参数指定进制。例如parseInt("1101", 2)返回13 - 数字转二进制字符串:调用
num.toString(2)。例如(25).toString(2)返回"11001" - 注意负数:
(-5).toString(2)返回"-101"(带符号前缀),不是补码形式;如需 8 位补码,需手动处理(如(n & 0xFF).toString(2).padStart(8, '0'))
用位运算操作二进制位
Number 在参与位运算(& | ^ ~ > >>>)时,会被自动转换为 32 位有符号整数(two’s complement),适合模拟底层位操作。
- 右移
>>保留符号位,>>>是无符号右移(零填充) - 例如:
255 >>> 4→15(11111111右移 4 位得00001111) - 提取某一位:
(num >> n) & 1;设置第 n 位:num | (1 ;清除第 n 位:<code>num & ~(1
获取数字的 IEEE 754 二进制布局
若需查看 Number 在内存中的实际 64 位二进制表示(如调试浮点精度问题),不能直接用 toString(2),而应借助 Float64Array 和 Uint8Array 视图:
- 创建
Float64Array存储该数值,再用Uint8Array查看其字节 - 然后逐字节转为 8 位二进制字符串并拼接,得到完整的 64 位 IEEE 754 表示
- 示例:
new Uint8Array(new Float64Array([3.14]).buffer)返回 8 字节数组,再对每个字节调用.toString(2).padStart(8,'0')
避免精度丢失的注意事项
JavaScript Number 只能精确表示 ≤ 2⁵³ 的整数。超出后,二进制转换可能出错:
-
parseInt("10000000000000000000000000000000000000000000000000000", 2)返回的值可能不准确 - 大整数建议用
BigInt:用BigInt("0b...")或BigInt(numStr)+.toString(2) - 涉及二进制协议或网络字节流时,优先使用
Uint8Array、DataView等二进制 API,而非单纯依赖Number
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











