Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将2的补码转换为其二进制表示形式_Javascript_Floating Point_Binary_Numbers_Twos Complement - Fatal编程技术网

Javascript 将2的补码转换为其二进制表示形式

Javascript 将2的补码转换为其二进制表示形式,javascript,floating-point,binary,numbers,twos-complement,Javascript,Floating Point,Binary,Numbers,Twos Complement,我正在执行位运算,其结果显然存储为2的补码。当我将鼠标悬停在存储在中的变量上时,我看到-num=-2086528968 我想要的那个数字的二进制是-100000111101000011000 但是当我说num.toString2时,我得到了一个完全不同的二进制表示,原始数字是二进制的,而不是2s comp-11111 00010111011111111001000 我如何取回第一根弦 链接到转换器:rapidtables.com/convert/number/decimal-to-binary.

我正在执行位运算,其结果显然存储为2的补码。当我将鼠标悬停在存储在中的变量上时,我看到-num=-2086528968

我想要的那个数字的二进制是-100000111101000011000

但是当我说num.toString2时,我得到了一个完全不同的二进制表示,原始数字是二进制的,而不是2s comp-11111 00010111011111111001000

我如何取回第一根弦

链接到转换器:rapidtables.com/convert/number/decimal-to-binary.html
输入这个数字:-2086528968

按照下面的结果:

变量编号=-2086528968; var bin=number>>>0.ToString 2 //10000011101000100001100000111000
控制台。logbin按照下面的结果进行操作:

变量编号=-2086528968; var bin=number>>>0.ToString 2 //10000011101000100001100000111000
console.logbin佩德罗已经回答了这个问题,但由于这是一个黑客行为,而且不完全是凭直觉,我将对此进行解释

我正在执行位运算,其结果显然存储为2的补码。当我将鼠标悬停在存储在中的变量上时,我看到num=-2086528968

否,大多数位运算的结果是32位有符号整数。这意味着位0x8000000被解释为后跟31位值的符号

奇怪的位序列是因为JS如何字符串化值,比如sign+Math.absvalue.toStringbase

如何处理?我们需要告诉JS不要将该位解释为符号,而是作为值的一部分。但是怎么做呢

一个容易理解的解决方案是将0x100000000加到负数上,从而得到它们的正数

函数printvalue{ 如果值<0{ 值+=0x100000000; } console.logvalue.toString2.padStart32,0; }
print-2086528968 佩德罗已经回答了这个问题,但由于这是一个黑客行为,不完全是凭直觉,我会解释它

我正在执行位运算,其结果显然存储为2的补码。当我将鼠标悬停在存储在中的变量上时,我看到num=-2086528968

否,大多数位运算的结果是32位有符号整数。这意味着位0x8000000被解释为后跟31位值的符号

奇怪的位序列是因为JS如何字符串化值,比如sign+Math.absvalue.toStringbase

如何处理?我们需要告诉JS不要将该位解释为符号,而是作为值的一部分。但是怎么做呢

一个容易理解的解决方案是将0x100000000加到负数上,从而得到它们的正数

函数printvalue{ 如果值<0{ 值+=0x100000000; } console.logvalue.toString2.padStart32,0; }
print-2086528968;你能解释一下你的答案吗?因为移动数字零的位置不会改变它!还是这样?或者换句话说,你所做的是一个黑客。请解释一下这个破解方法,让OP和未来的读者也能理解它是如何工作的/为什么工作的。另外,我会只在数字为负数时运行这个移位代码,还是一直运行?@a_here_和_现在你可以一直运行它,如果不是像检查数字是否为负数一样快的话;它对正整数没有任何作用。你能解释一下你的答案吗?因为移动数字零的位置不会改变它!还是这样?或者换句话说,你所做的是一个黑客。请解释一下这个破解方法,让OP和未来的读者也能理解它是如何工作的/为什么工作的。另外,我会只在数字为负数时运行这个移位代码,还是一直运行?@a_here_和_现在你可以一直运行它,如果不是像检查数字是否为负数一样快的话;它对正整数没有任何作用。我应该选择你的还是他的答案?显然,你的答案更全面。你认为最能回答问题的答案。在第二个例子中,当你设置值位时,括号中的值不可能是负数,从而产生1-1etc吗。正如您所说,Stringify将在前面放一个负数,然后将其余的位显示为valuevalue&0x7FFFFFFF不能为负数,因为它排除了包含负号的位。我担心它可能会将7fffff中的第一位解释为负数指示符,但后来我意识到它将0x7FFFFFFF的结果放入一个32位整数中,因此您的回答非常正确。谢谢。我应该选择你的还是他的答案?显然,你的答案更全面。你认为最能回答问题的答案。在第二个例子中,当你设置值位时,括号中的值不可能是负数,从而产生1-1etc吗。正如您所说,Stringify将在前面放一个负数,然后将其余的位显示为valuevalue&0x7
FFFFFFF不能为负,因为它排除了包含负号的位。我担心它可能会将7FFFFFFF中的第一位解释为负指示符,但后来我意识到它将0x7FFFFFFF的结果放入32位整数中,因此您的回答非常正确。非常感谢。