dans la réponse acceptée sur ma question précédente
( Quel est le moyen le plus rapide de générer Un entier aléatoire dans JavaScript? ), je me demandais comment un numéro perd ses décimales via le symbole Par exemple: p> Comment ce plancher est-il le numéro à Quelques exemples: < / p> | code>
.
5 p>
3 Réponses :
Les opérateurs bitwises convertissent leurs arguments en entiers (voir http://es5.github.com/#x9 .5 ).
La plupart des langues Je sais em> ne prenez pas la prise de ce type de conversion:
$ python -c "1.0|0"
Traceback (most recent call last):
File "", line 1, in
TypeError: unsupported operand type(s) for |: 'float' and 'int'
$ ruby -e '1.0|0'
-e:1:in `': undefined method `|' for 1.0:Float (NoMethodError)
$ echo "int main(){1.0|0;}" | gcc -xc -
: In function âmainâ:
:1: error: invalid operands to binary | (have âdoubleâ and âintâ)
s / la plupart (. *?) NE PAS / FORTMENT TAPED \ 1 Généralement pas / CODE> (Ceci est toutefois dépendant de la langue.)
Étant donné que, selon les spécifications de la carte ECMAScript, les opérateurs d'opérateurs bitwises appellent voir 11.10 opérateurs binaires bitwise : p>
La production évaluer appel évaluer appel appel appel Appliquez l'opérateur bitwise retour toint32 code> sur chaque expression à évaluer. p>
A: A @b code>, où
@ code> est l'un des opérateurs bits dans
Les productions ci-dessus sont évaluées comme suit: P>
a code>. p> li>
getvalue (résultat (1)) code>. p> li>
b code>. p> li>
getvalue (résultat (3)) code>. p> li>
toint32 (résultat (2)). code> strong> p> p> p> p> L>
toint32 (résultat (4)). code> strong> p> p> p> L>
@ code> à
résultat (5) code> et
résultat (6) code>. Le résultat est un entier 32 bits signé em>. p> li>
résultat (7) code>. p> li>
ol>
blockQuote>
Lorsque vous effectuez un étage code>, bien qu'il soit possible de convertir l'argument en entiers, ce n'est pas ce que la plupart des langues feraient parce que le type d'origine est un numéro de point flottant. P >
Un meilleur moyen de le faire tout en préservant le type de données consiste à accéder à Si vous êtes intéressé, vous pouvez jeter un coup d'œil au Spécification IEEE pour flotter Numéros de points. P> exponent code> chiffres dans le
mantisa code> et zéro les bits restants. P>
Vous devez savoir que l'utilisation des opérateurs BitWise vous limitera aux entiers signés de 32 bits.
((math.pow (2,32) / 2) -1) | 0; // 2147483647 code> Supprimer le
-1 code> et vous n'obtiendrez pas le résultat souhaité.
((math.pow (2,32) / 2)) | 0; // -2147483648 code>
Intéressant. C'est probablement la raison pour laquelle cette fonction est légèrement plus rapide que la fonction
math.floor (x) code>. JSPERF.com/FLOOR-OR-OR
ce n'est pas réellement "revêtement", essayez avec
-1.23 code> pour voir ce qui se passe