NodeJS中十进制转二进制再反转回十进制时偶数输出错误问题
问题根因
你当前的代码没有将输入的十进制数转换为固定32位长度的二进制串,直接反转会丢失高位补位的0,从而导致结果不符合预期:
- 奇数的二进制末尾为1,反转后开头为1,不会因为前导零被截断导致结果错误,这也是你测试奇数结果正常的原因
- 偶数的二进制末尾为0,反转后开头的0会被
parseInt自动忽略,相当于丢失了原数末尾的0,最终输出结果偏小
修复方案
只需要在转二进制后,用padStart方法补前导零到32位长度,再执行反转操作即可,修复后的代码如下:
function mirror_bits(n) { // 转为32位无符号整数后转二进制,补前导0到固定32位长度 const binStr = (n >>> 0).toString(2).padStart(32, '0'); const reversedBin = binStr.split('').reverse().join(''); return parseInt(reversedBin, 2); }
如果你的业务场景需要处理其他位数的数值,修改padStart的第一个参数为对应位数即可。
验证结果
用你提供的测试用例运行修复后的代码,输出结果完全符合预期:
- 输入
2031768448→ 输出30038174 - 输入
3105510272→ 输出30038173 - 输入
622482304→ 输出30038180 - 输入
3357168512→ 输出30038035 - 输入
1562006400→ 输出30038202 - 输入
3709490048→ 输出30038203
内容的提问来源于stack exchange,提问作者user2390526
相关产品推荐
相关产品推荐

