84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
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
早く書きましょう!