js では、以前は切り捨てに Math.floor メソッドが使用されていましたが、現在は次のような使用法が見られます: OR 演算
間隔 = 間隔 | 0
なぜこのように切り捨てられるのでしょうか? 、Math.floor と比較して、この使用法の利点は何ですか?
某草草2017-06-26 10:57:11
|
は論理 OR ではなく、ビット単位の OR (OR) であることに注意してください。
いくつかの小さな違い。たとえば、Math.floor(NaN)
还是返回 NaN
。但 NaN | 0
返回 0。
再比如 Math.floor(Infinity)
返回 Infinity
,但 Infinity | 0
は0を返します
给我你的怀抱2017-06-26 10:57:11
まず第一に、これらの小さな違いについては、2 階の S1ngS1ng が正しいです。
また、|
是位或运算,由于0
在内存中存储的时候,是所有的整数位全部被填充了0,所以按二进制位和一个数值进行或运算,对应位上无论是0
还是1
和0
进行或运算,都会得到它本身,但是由于数字0在内存中不存在小数部分,所以位或运算之后interval
の小数部分は切り捨てられます。実際、切り捨ては小数部分を切り捨てることによって実現されます。
ちょっとした操作なのでMath.floor()
よりも早くなります。
三叔2017-06-26 10:57:11
本当の理由は、js 内の自動型変換です。
js内の値はすべて64位
浮点型表示的。当一个数值需要进行位运算
时,js会自动将它转换为32位有符号
で四捨五入され、小数部分が切り捨てられます。
n|0; n>>0; //次の 0 は、n の整数値が変更されないことを保証するためにのみ使用されます。
64 ビットから 32 ビットに削減すると、精度が低下します。 小心!
、最大有効範囲: 2^32/2-1
给我你的怀抱2017-06-26 10:57:11
両方を達成できます、interval = interval | 0
这个是一个写作的技巧,看个人爱好吧。可能就是interval = interval | 0
这种写法运行会快一点,写代码这个也肯定比Math.floor
早く書きましょう!