JavaScript中的按位运算

问题描述 投票:3回答:1

我知道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 >>> 04294967295?我知道>>>>>之间有什么区别,但是第二个操作数是0,所以我不明白为什么这些操作以不同的方式工作。

javascript bitwise-operators
1个回答
0
投票

Difference between >>> and >>

[在算术移位中,符号位被扩展以保留数字的签名。

8位中的-1是11111111 -2是11111110 ...

但是,逻辑右移并不关心该值是否可以可能代表一个签名的数字;它只是将所有内容移至右边,并从左边开始用0填充。

所以这里,-1 >>>将11111111向右推一个,因此“-”号丢失,并显示最高的正数0111111(以8位显示)

© www.soinside.com 2019 - 2024. All rights reserved.