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