如何用二进制运算符实现目标输出?JavaScript位运算求助
问题原因与解决方案
你的代码无法得到期望结果,核心原因是JavaScript的常规位运算符仅针对32位有符号整数操作:
- 执行
var1 << 32时,32位整数的所有有效位会被完全移出,结果直接变为0,导致后续拼接逻辑完全失效 - 虽然目标值
0x4C4400030001在Number的精度范围内(小于2^53),但位运算的32位限制让你无法通过这种方式构建大整数
正确实现方式
使用BigInt处理任意精度整数运算,就能支持超过32位的位移操作,代码如下:
const var1 = 0x4C44n; const var2 = 3n; const var3 = 1n; const result = (var1 << 32n) + (var2 << 16n) + var3; console.log(result.toString(16)); // 输出 4c4400030001
如果不想修改原始变量的类型,也可以在运算时临时转换为BigInt:
const var1 = 0x4C44; const var2 = 3; const var3 = 1; const result = (BigInt(var1) << 32n) + (BigInt(var2) << 16n) + BigInt(var3); console.log(result.toString(16));
关键说明
- BigInt支持任意长度的整数运算,不会出现32位截断的问题
- 位移量必须使用BigInt类型(如
32n),否则会抛出类型错误 - 最终结果为BigInt类型,调用
toString(16)即可得到目标十六进制字符串
内容的提问来源于stack exchange,提问作者André Fiedler
相关产品推荐
相关产品推荐

