Question

Une réponse sur le responsable de l'offre a pense-t-il, JavaScript garantit-il un certain encodage endian sur les systèmes d’exploitation et les navigateurs?

Ou, autrement dit, des décalages au niveau du bit sur des entiers & "safe &"; en JavaScript?

Était-ce utile?

La solution

Oui, ils sont en sécurité. Bien que vous n'ayez pas les avantages en termes de rapidité que vous pourriez espérer puisque les opérations sur les bits JS sont & < href="http://www.hunlock.com/blogs/The_Complete_Javascript_Number_Reference#quickIDX4" rel="noreferrer"> un hack & ";

Autres conseils

Le transfert est sûr, mais votre question est fausse, car l’endianisme n’affecte en aucun cas les opérations de transfert de bits. Le décalage gauche est le même sur les systèmes big-endian et little-endian dans toutes les langues. (Le décalage à droite peut différer, mais uniquement en raison de l'interprétation du bit de signe, et non des positions relatives des bits.)

L'endianisme n'entre en jeu que lorsque vous avez la possibilité d'interpréter un bloc de mémoire sous forme d'octets ou de valeurs entières plus grandes. En général, Javascript ne vous donne pas cette option car vous n’avez pas accès à des blocs de mémoire arbitraires, en particulier aux blocs de mémoire occupés par des variables. Les Tableaux typés offrent une vue des données sous un angle sensible à Endian, mais le classement dépend de l'hôte. système; ce n'est pas nécessairement la même chose pour tous les environnements hôtes Javascript possibles.

Endianness décrit l’ordre de stockage physique et non logique . Logiquement, le bit le plus à droite est toujours le bit le moins significatif. Que l'octet de ce bit soit celui qui réside à l'adresse mémoire la plus basse est un problème complètement séparé, et cela n'a d'importance que lorsque votre langue expose un concept tel que & "Adresse mémoire la plus basse, &"; ce que Javascript ne fait pas. Les tableaux typés le font, mais alors seulement dans le contexte des tableaux typés; ils n'offrent toujours pas l'accès au stockage de données arbitraires.

Certaines de ces réponses sont datées, car endianness peut être pertinent lors de l’utilisation de tableaux typés! Considérez:

var arr32 = new Uint32Array(1);
var arr8 = new Uint8Array(arr32.buffer);
arr32[0] = 255;
console.log(arr8[0], arr8[1], arr8[2], arr8[3]);

Lorsque j'exécute cette opération dans la console de Chrome, le résultat est 255 0 0 0, ce qui indique que ma machine est little-endian. Cependant, les tableaux utilisent le système endianness par défaut , vous pourrez donc voir 0 0 0 255 si votre machine est big-endian.

ECMA Script utilise en réalité le concept de type entier, mais il est implicitement forcé vers ou depuis une valeur à virgule flottante double précision selon les besoins (si le nombre représenté est trop grand ou s'il comporte une composante décimale).

De nombreux interprètes Javascript classiques (SpiderMonkey en est un exemple) utilisent un raccourci dans l’implémentation et interprètent toutes les valeurs numériques comme des doublons pour éviter de vérifier le type natif réel de la valeur de chaque instruction. À la suite du piratage d’implémentation, les opérations sur les bits sont implémentées sous la forme d’une conversion vers un type intégral, suivie d’une conversion vers une représentation double. Ce n’est donc pas une bonne idée d’utiliser des opérations au niveau des bits en Javascript et vous n’obtiendrez de toute façon pas plus performant.

  

sont des décalages au niveau du bit sur les entiers & "; safe &"; en JavaScript?

Seulement pour les entiers compris entre 32 bits (31 + signe). Contrairement à, disons, Python, vous ne pouvez pas obtenir 1 & Lt; & Lt; 40.

C’est ainsi que les opérateurs au niveau du bit sont définis pour fonctionner par ECMA-262, même si les nombres JavaScript sont en réalité des nombres flottants. (Techniquement, les flotteurs double précision, vous donnant 52 bits de mantisse, assez facilement pour couvrir la plage d'un int de 32 bits.)

Il n’ya pas de problème d’endianisme impliqué dans l’arithmétique binaire, et aucun format de stockage d’octets où l’endianisme pourrait être impliqué n’est intégré à JavaScript.

JavaScript n'a pas de type entier, seulement un type à virgule flottante. Vous ne pouvez jamais vous approcher suffisamment des détails de la mise en œuvre pour vous en préoccuper.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top