javascript - 将二进制补码数解析为十进制?
问题描述
好吧,我很困惑,这并不比我想象的容易......我想将二进制补码字符串转换为适当的数字:
-5 = '11111011' 根据维基百科
所以我认为以下将返回负 5,但事实并非如此。阅读 Wikipedia 之后,似乎我所要做的就是减去一个然后反转位:
~(parseInt('11111011', 2) - 1)
但它返回-251。令人困惑...
请注意,我将处理许多奇数位长度,并且都不会是 8 位。
解决方案
这将采用一个未知的位模式 <= 32 位,如果它是 <8 位,则转换为正整数,如果 >= 8 带有前导 1,则为负符号整数。
诀窍是在 parseInt 之前填充到 32
const getSigned = binStr => parseInt(binStr.length >= 8 && binStr[0] === "1" ?
binStr.padStart(32, "1") : binStr.padStart(32, "0"), 2) >> 0;
const signed = [
"11111011", // -5
"01111011", // 123
"1111111111000" // -8
].map(getSigned);
console.log(signed);
推荐阅读
- r - R创建列表或矩阵
- java - 多个 CSV 记录到一个 Java 对象中
- javascript - 单击webview swift中没有链接的按钮
- node.js - Node/Express.js 不在生产服务器上显示图像
- python-3.x - 在 Python 中将 Excel 日期数字转换为日期时间
- python - 无法使用 apt-get install python-pip 在 kali linux 2019.3 vbox amd 64 中安装 python-pip
- python - 如何替换熊猫系列中的值?
- powerbi - 如何在 power bi 中取消选择另一个单选按钮?
- javascript - Gatsby:手动重新执行页面查询
- python - Scrapy 按顺序运行两个爬虫,其中第二个爬虫从第一个爬虫获取输入