Javascript 十进制到二进制 - 64 位
Javascript Decimal to Binary - 64 bit
十进制-805306368
的二进制文件为:
11111111111111111111111111111111 11010000000000000000000000000000
但是,在Javascript中,我得到以下内容:
var str = parseInt(-805306368).toString(2);
document.write(str);
-110000000000000000000000000000
谁能解释一下如何从这个十进制解析 64 位二进制字符串?
JavaScript不使用
二进制补码表示,它使用字符串前面的连字符-
字符来表示负数。这是因为二进制补码表示需要知道位的长度。当将具有一定位数的二进制补码数转换为具有更多位的补码数时(例如,从单字节变量复制到双字节变量时),必须在所有额外位中重复最高有效位。
为了获得预期的结果,您可以反转每个位,但它没有提供我们想要的结果:
>>> (~-805306368).toString(2)
"101111111111111111111111111111"
然而,JavaScript 对 32 位整数执行所有二进制操作,因此这不适用于更大(或更小)的数字,至少会非常混乱。因此,您需要实现自己的格式化算法。
// example of 32-bit-conversion:
>>> (~parseInt("1111111111111111111111111111111",2)).toString(2)
"-10000000000000000000000000000000"
>>> (~parseInt("11111111111111111111111111111111",2)).toString(2)
"0"
我的实现:
function get64binary(int) {
if (int >= 0)
return int
.toString(2)
.padStart(64, "0");
else
return (-int - 1)
.toString(2)
.replace(/[01]/g, d => +!+d) // hehe: inverts each char
.padStart(64, "1");
}
console.log(get64binary(805306368))
console.log(get64binary(-805306368))
您可以再次使用 parseInt()
。它有一个可选的第二个参数,使您能够指定您尝试解析的字符串中数字的基数(或基数)。
如:parseInt("-110000000000000000000000000000", 2) // gives -805306368
相关文章:
- 如何将PDF作为二进制文件传递到window.open()
- 如何将字母转换为二进制代码
- 我想在AngularJS应用程序中创建一个输入数字框,用户不应该在该框上键入十进制数字.(一个整数输入框)
- 需要帮助编写在不使用toString的情况下将十进制转换为二进制的代码
- 我不知道此代码中的这些符号是什么意思.十进制到二进制
- 如何将二进制分数转换为十进制
- Java脚本中的二进制到十进制
- 十进制到二进制代码Javascript
- Javascript 十进制到二进制 - 64 位
- 二进制到十进制,不使用 parseInt
- 如何将二进制字符串转换为十进制
- 神秘的2出现在我的JavaScript十进制到二进制转换器的输出中
- 如何在JS中将十进制转换为二进制
- 谁能解释这个过程与转换十进制数字二进制
- Javascript中的字符串转换(十进制到二进制)
- 二进制到十进制Javascript
- parseInt 不将十进制转换为二进制
- 在javascript中从十进制到八进制,二进制和十六进制的转换
- JavaScript中的十进制到二进制递归函数
- 编程一个二进制到十进制的转换形式——我的代码有什么问题?(JavaScript和HTML5)