2 回答
TA贡献1779条经验 获得超6个赞
位运算符用于对二进制位
进行计算,这些位运算符直接处理每一个比特位(bit),所以是非常底层的运算,好处是速度极快
,缺点是很不直观,许多场合不能使用它们
。
位运算符只对整数
起作用,如果一个运算子不是整数,会自动转为整数后再执行。虽然在JavaScript内部,数值都是以64位浮点数的形式储存,但是做位运算的时候,是以32位带符号的整数
进行运算的,并且返回值也是一个32位带符号的整数
。
回到上面的问题:
这是左移运算符
,左移运算符表示将一个数的二进制值向左移动指定的位数,尾部补0,即乘以2的指定次方(最高位即符号位不参与移动)。
左移0
位,就相当于将该数值转为32位整数,等同于取整,对于正数和负数都有效。
TA贡献1815条经验 获得超6个赞
位操作符用于在最基本的层次上,即按内存中表示数值的位来操作数值。ECMAScript 中的所有数
值都以 IEEE-754 64 位格式存储,但位操作符并不直接操作 64 位的值。而是先将 64 位的值转换成 32 位
的整数,然后执行操作,最后再将结果转换回 64 位。对于开发人员来说,由于 64 位存储格式是透明的,
因此整个过程就像是只存在 32 位的整数一样
位运算 的操作数都会先对其进行抽象的 ToInt32 操作
ToUint32: (Unsigned 32 Bit Integer)
1.Let number be the result of calling ToNumber on the input argument.
2.If number is NaN, +0, −0, +∞, or −∞, return +0.
3.Let posInt be sign(number) × floor(abs(number)).
4.Let int32bit be posInt modulo 232; that is, a finite integer value k of Number type with positive sign and less than 232 in magnitude such that the mathematical difference of posInt and k is mathematically an integer multiple of 232.
5.Return int32bit.
三四步就是个求整取余数的过程
<<0 对实际的值没有进行具体的位移操作,但是仍然会进行其中的 ToInt32 操作,在一定的范围内就是简单的按绝对值取整,超出这个范围就会变成意想不到的值
添加回答
举报