我希望看到二进制中的整数,正数或负数.
更喜欢这个问题,但对于JavaScript.
十进制-805306368的二进制文件是:
11111111111111111111111111111111 11010000000000000000000000000000
但是,在Javascript中我得到以下内容:
var str = parseInt(-805306368).toString(2);
document.write(str);
Run Code Online (Sandbox Code Playgroud)
-110000000000000000000000000000
任何人都可以解释如何从这个十进制解析64位二进制字符串?
我知道 JavaScript 中的数字以 IEEE-754 格式存储。但是当我们使用整数时,特别是按位运算符,它们被表示为 32 位的二进制补码。
-1
也会如此0xFFFFFFFF
。但是。(-1).toString(2)
-1
并且-1 >>> 31
是 1,没错,但是-1 >>> 32
必须是0
,无论它是4294967295
。而且-1 << 32
一定是0
,但确实是-1
。
为什么按位运算以这种方式工作?并toString()
显示带有符号的数字-
,为什么这个减号不在符号位中?又何以-1 >> 0
是-1
,但又-1 >>> 0
是4294967295
?>>
我知道和之间有什么区别>>>
,但第二个操作数是0
,所以我无法理解为什么这些操作以不同的方式工作。
编写一个转换函数,将数字传递给二进制字符串.该函数正在创建一个合适的二进制序列,但我的比较函数在比较等于binaryIndex[0]
(例如n = 32,16,8,4)的数字时跳过第一个索引.有什么想法吗?
这一步创建了一个二进制有序数组,我将使用它来检查传入的参数:
var Bin = function(n) {
var x =1;
var binSeq=[];
var converted=[];
for (var i=0; x <= n; i++) {
binSeq.unshift(x)
x = x+x
}
console.log(binSeq)
Run Code Online (Sandbox Code Playgroud)
下一步应该比较并吐出一个1和0的二进制序列:但它正在跳过 if (n === binSeq[0])
for (var i=0; i < binSeq.length; i++) {
if ((n - binSeq[i]) >= 0) {
converted.unshift(1);
n=n-binSeq[i]
} else {converted.unshift(0)}
}
console.log(converted)
}
Run Code Online (Sandbox Code Playgroud)