Javascript 二进制二补数到十进制数的解析?
嗯,我很困惑,这并不比我想象的容易。。。我想将一个二进位二进制字符串转换为适当的数字: -5='11111 011'根据 所以我认为下面的结果会返回负5,但事实并非如此。阅读维基百科后,我似乎只需要减去一,然后倒转位: ~(parseInt('1111011',2)-1) 但它返回-251。迷惑Javascript 二进制二补数到十进制数的解析?,javascript,encoding,binary,type-conversion,Javascript,Encoding,Binary,Type Conversion,嗯,我很困惑,这并不比我想象的容易。。。我想将一个二进位二进制字符串转换为适当的数字: -5='11111 011'根据 所以我认为下面的结果会返回负5,但事实并非如此。阅读维基百科后,我似乎只需要减去一,然后倒转位: ~(parseInt('1111011',2)-1) 但它返回-251。迷惑 请注意,我将处理许多奇数位长度,所有长度都不是8位。这将采用未知位模式=8,前导为1,负符号int 诀窍是在parseInt之前填充到32 函数getSigned(binStr){ binStr=bi
请注意,我将处理许多奇数位长度,所有长度都不是8位。这将采用未知位模式=8,前导为1,负符号int 诀窍是在parseInt之前填充到32
函数getSigned(binStr){
binStr=binStr.length>=8&&binStr[0]=“1”?
binStr.padStart(32,“1”):
binStr.padStart(32,“0”);
返回parseInt(binStr,2)>>0
}
[
"11111011", // -5
"01111011", // 123
"1111111111000" // -8
].forEach(功能(binStr){
let signed=getSigned(binStr)
控制台日志(签名);
});代码>经过一段时间的研究,我创建了这个解决方案。。。如果您对二进制和位运算有经验,请告诉我您的想法:
function getSignedInteger(bits) {
let negative = (bits[0] === '1');
if (negative) {
let inverse = '';
for (let i = 0; i < bits.length; i++) {
inverse += (bits[i] === '0' ? '1' : '0');
}
return (parseInt(inverse, 2) + 1) * -1;
} else {
return parseInt(bits, 2);
}
}
函数getSignedInteger(位){
设负=(位[0]=“1”);
如果(否定){
让倒数=“”;
for(设i=0;i
getSignedInteger('11111 011')返回-5
我感觉到你的困惑。wikipedia的文章向您展示了8位数字的示例,但您通常不会在javascript中处理8位数字。如果您想探索javascript中的二进制数数学,您可能会使用32位,并使用位运算符将对话强制为32位整数
因此,翻译维基百科文章会给你以下信息:
-5看起来更像11111111111111111111111 011
所有那些多余的零都会被翻转。考虑到这一点,这更有意义:
let str=“11111111111111111111 011”
console.log(str.length,'bits')
log((parseInt(str,2)>>0))
这有用吗?还是这个?我看了每一个问题,我可以找到关于它,但仍然无法让它工作…为什么这对你不工作<代码>变量二进制=(-5>>>0).toString(2);//强制为uint32
我正在尝试从字符串转换为数字,我不知道数字。您对此有何看法?parseInt('11111 011'.padStart(32,'1'),2)>>0@wayofthefuture这给了我预期的结果。@wayoffuture-是的,这有助于实现所有32位。两位伟人;)我更新了答案。现在更优雅了。我看到了你的评论——我们得出了相同的结论:)