了解 JavaScript 按位 NOT 运算符和 toString() 函数
提前感谢大家:
alert((~1).toString(2));
此输出: -10
但在 PHP/Java 中,它输出 11111111111111111111111111111110
我错过了什么吗? 为什么Javascript要在输出中添加“-”?
Thanks to everyone in advance:
alert((~1).toString(2));
This outputs: -10
But in PHP/Java it outputs 11111111111111111111111111111110
Am I missing something? Why does Javascript add a "-" to the output?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
我知道Java使用二进制补码来表示负数,二进制的11111111111111111111111111111110,即~1给出的,表示-2。 或者,用带有负号的二进制表示,-10,这就是您得到的。
使用二进制补码计算 10 的负数(以 2 为基数)的方法是,首先将所有位取反,得到:
11111111111111111111111111111101
,然后加 1,得到:
11111111111111111111111111111110< /em>
我想同样的情况也发生在 Javascript 中。
I know Java uses two's complement to represent negative numbers, and 11111111111111111111111111111110 in binary, which is what ~1 gives, represents -2. Or, represented in binary with a negative sign, -10, which is what you got.
The way you calculate the negative of 10 (in base 2) using two's complement is that you first invert all of the bits, giving you:
11111111111111111111111111111101
then you add 1, giving you:
11111111111111111111111111111110
I guess the same is happening in Javascript.
您可以使用移位运算符>>> 在转换为二进制之前将数字转换为无符号整数:
You can use the shift operator >>> to convert the number to an unsigned integer before converting to binary:
简短回答:
(~1)
执行 1 的补码转换十进制,给我们
-2
.toString()
函数基本上采用不带符号2
的十进制,将其转换为二进制10
并添加一个-
符号,为我们提供-10
。更详细的答案:
它在函数
.toString()
。 当您通过.toString()
输出数字时:取自 developer.mozilla.org< /a> 我们得到了这个计算整数的 1 补码的公式,当您对小数执行 NOT (~) 时会使用该公式:
也许用这个表和一个例子可以更好地解释:
Short answer:
(~1)
performs a 1's complement conversion of thedecimal which gives us
-2
.toString()
function basically takes the decimal without the sign2
, converts it to binary10
and adds a-
sign which gives us-10
.A more detailed answer:
It's in the function
.toString()
. When you output a number via.toString()
:Taken from the developer.mozilla.org we got this formula that calculates the 1's complement of an integer, this is used when you perform a NOT (~) on a decimal:
Maybe it's better explained with this table and an example:
这假设您正在使用 32 位...
结果
11111111111111111111111100001111
This assumes that you are working in 32 bits...
results in
11111111111111111111111100001111
这是一个在 javascript 中实现 NOT 的解决方案。 它不漂亮,但很有效。
如果要查看 NOT(位切换)后的小数的二进制字符串,请使用以下代码。
Here's a solution to implement NOT in javascript. It ain't pretty but it works.
If you want to view the Binary String of a decimal after a NOT (bit Toggle), then use the following code.