Maison > Questions et réponses > le corps du texte
Dans js, dans le passé, la méthode Math.floor était utilisée pour arrondir à l'inférieur. Nous voyons maintenant cette utilisation : OR operation
interval = interval | 0
Pourquoi pouvons-nous arrondir à l'inférieur de cette manière ? comparaison d'étage, quels avantages ?
某草草2017-06-26 10:57:11
Notez que |
n'est pas un OU logique, mais un OU au niveau du bit (OR).
Quelques petites différences. Par exemple Math.floor(NaN)
还是返回 NaN
。但 NaN | 0
返回 0。
再比如 Math.floor(Infinity)
返回 Infinity
,但 Infinity | 0
renvoie 0
给我你的怀抱2017-06-26 10:57:11
Tout d’abord, S1ngS1ng à l’étage a raison sur ces petites différences.
De plus, la partie décimale de |
是位或运算,由于0
在内存中存储的时候,是所有的整数位全部被填充了0,所以按二进制位和一个数值进行或运算,对应位上无论是0
还是1
和0
进行或运算,都会得到它本身,但是由于数字0在内存中不存在小数部分,所以位或运算之后interval
est supprimée. En fait, l’arrondi est obtenu en supprimant la partie décimale.
Parce que c'est une petite opération, ce sera plus rapide que Math.floor()
.
三叔2017-06-26 10:57:11
La vraie raison est la suivante : conversion automatique de type dans js.
Les valeurs dansjs sont toutes arrondies à 64位
浮点型表示的。当一个数值需要进行位运算
时,js会自动将它转换为32位有符号
et la partie décimale est supprimée.
n|0; n>>0; //Le 0 suivant est uniquement utilisé pour garantir que la valeur entière de n reste inchangée.
Réduire de 64 bits à 32 bits entraînera une perte de précision. 小心!
, portée efficace maximale : 2^32/2-1
> f64=(Math.pow( 2,32)/2-1)-0.5
2147483646.5
> f64|0
2147483646
> f64>>0
2147483646
> (f64 + 2)|0 //超出有效范围
-2147483648
> (f64 + 2)>>0 //超出有效范围
-2147483648
> Math.floor(f64 + 2) //正确
2147483648
给我你的怀抱2017-06-26 10:57:11
Les deux peuvent être réalisés, interval = interval | 0
这个是一个写作的技巧,看个人爱好吧。可能就是interval = interval | 0
这种写法运行会快一点,写代码这个也肯定比Math.floor
Écrivez vite !