因为位操作的结果是一个32位整数。即使被操作数是小数也会被转化为整数。不光3.9|0可以实现跟Math.floor一样的效果,3.9&-1也一样是这个结果,因为将任一数值 x 与 -1 执行按位与操作,其结果都为 x【整数,小数也会转化成整数】;-(~3.9)-1 也是3,3.9<<1>>1也是3,其实说白了就是利用位操作舍弃小数的原理,虽然也有二进制的小数位,但位操作无视了,只关心整数部分。
3.9的二进制是11,0的二进制是0| 是按位运算 11|0 = 11二进制11还是3跟Math.floor(3.9)没有关系,是值刚好相同而已 确实上面说的有误,不是3.9的二进制是11,而是位运算会取整运行
因为位操作的结果是一个32位整数。即使被操作数是小数也会被转化为整数。
不光3.9|0可以实现跟Math.floor一样的效果,3.9&-1也一样是这个结果,因为将任一数值 x 与 -1 执行按位与操作,其结果都为 x【整数,小数也会转化成整数】;-(~3.9)-1 也是3,3.9<<1>>1也是3,其实说白了就是利用位操作舍弃小数的原理,虽然也有二进制的小数位,但位操作无视了,只关心整数部分。