Opérateurs au niveau du bit et “boutisme”
Ne endianness question à toutes les opérations bit à bit? Soit logique ou d'évolution?
Je suis en train de travailler sur les devoirs à l'égard des opérateurs au niveau du bit, et je ne peux pas faire des têtes ou queues sur elle, et je pense que je suis en train assez accroché sur l'endianess. C'est, je suis à l'aide d'un petit-boutiste de la machine (comme la plupart le sont), mais est-ce besoin d'être prises en compte ou est-ce un gaspillage de fait?
En cas de questions, je suis à l'aide de C.
- Dupliquer: stackoverflow.com/questions/7184789/...
- À mon humble avis, ils sont un peu différentes questions. Cette question est du genre "c'est
128 << 2 == 512
sur n'importe quel CPU?", cette question est comme "ne128 << 2
laïcs comme0x02 0x00
sur n'importe quel CPU?".
Vous devez vous connecter pour publier un commentaire.
Endianness uniquement les questions de mise en page de données dans la mémoire. Dès que les données sont chargées par le processeur pour être opéré, endianness est totalement sans importance. Les quarts de travail, les opérations bit à bit, et ainsi de suite effectuer que vous attendez (données logiquement définie comme faible-de l'ordre peu élevé), indépendamment de l'endianness.
Les opérateurs au niveau du bit abstraction de l'endianness. Par exemple, le
>>
opérateur se décale les bits vers la du chiffre le moins significatif. Cependant, cela ne veut pas dire que vous êtes sûr d'ignorer complètement l'endianness lors de leur utilisation, par exemple lorsque vous traitez avec des octets individuels dans une structure plus grande que vous ne pouvez pas toujours supposer qu'ils vont tomber dans le même lieu.Pour être clair, je ne suis pas dans la base de désaccord avec les autres réponses ici. Le point que je suis en train de faire est de souligner que, bien que les opérateurs au niveau du bit sont essentiellement endian neutre, vous ne pouvez pas ignorer l'effet de l'endianess dans votre code, en particulier lorsqu'il est combiné avec d'autres opérateurs.
Comme d'autres l'ont mentionné, les changements sont définies par la spécification du langage et sont indépendantes l'une de l'endianness, mais la mise en œuvre d'un décalage à droite peut varier en fonction sur le forum de l'architecture utilise un complément ou en complément à deux arithmétique.
Il dépend. Sans casting le nombre dans un nouveau type, vous pouvez traiter le boutisme de manière transparente.
Toutefois, si votre opération implique une nouvelle conversion de type, puis utilisez votre attention.
Par exemple, si vous voulez décalage à droite des bits et cast (explicitement ou non) d'un nouveau type, endianness questions!
Pour tester votre endianness, vous pouvez simplement jeter un
int
dans unchar
:{union { int i = 1; char a[4];} b;return b.a[3] == 1;} //big endian
Vous n'avez pas spécifié de la langue, mais généralement, les langages de programmation tels que C abstraite endianness loin dans les opérations bit à bit. Donc non, il n'a pas d'importance dans les opérations bit à bit.