exemple tout bête : l'échange du contenu de deux variables à base de XOR
Je cite la faq sur le langage C:
20.15c: How can I swap two values without using a temporary?
A: The standard hoary old assembly language programmer's trick is:
a ^= b;
b ^= a;
a ^= b;
But this sort of code has little place in modern, HLL
programming. Temporary variables are essentially free,
and the idiomatic code using three assignments, namely
int t = a;
a = b;
b = t;
is not only clearer to the human reader, it is more likely to be
recognized by the compiler and turned into the most-efficient
code (e.g. perhaps even using an EXCH instruction). The latter
code is obviously also amenable to use with pointers and
floating-point values, unlike the XOR trick. See also questions
3.3b and 10.3.
De façon plus générale, je ne pense pas que ce osit une bonne idée de beaucoup bosser avec les bits:
exemple, la divison par 2, que certains conseillent d'effectuer par un décalage.
Le problème, c'est que si ton nombre est signé, et que tu fais un décalage à droite, bah le comportement est indéfini (décalage logique ou arithmétique?).
C'est une grosse source de bugs.
Tous ça, c'était surtout utile avant, quand les compilos étaient cons comme des balais. Aujourd'hui, ils optimisent tellement le code qu'il vaut mieux les laisser faire.
Enfin, un argument sensé que j'ai lu je ne sais plus où:
avec des "hacks" comme ça, tu gagnes un peu, mais ce peu va se réduire avec les années (progrès du compilo/métériel). Par contre, tu perds en lisibilité, et pour toujours...
Attention, je ne dis pas que les manipulations de bits (en info :-) sont inutiles, je dis qu'il faut faire attention.
[^] # Re: Bravo mais..
Posté par neologix . En réponse à la dépêche La quintessence des algorithmes bit à bit. Évalué à 10.
Je cite la faq sur le langage C:
De façon plus générale, je ne pense pas que ce osit une bonne idée de beaucoup bosser avec les bits:
exemple, la divison par 2, que certains conseillent d'effectuer par un décalage.
Le problème, c'est que si ton nombre est signé, et que tu fais un décalage à droite, bah le comportement est indéfini (décalage logique ou arithmétique?).
C'est une grosse source de bugs.
Tous ça, c'était surtout utile avant, quand les compilos étaient cons comme des balais. Aujourd'hui, ils optimisent tellement le code qu'il vaut mieux les laisser faire.
Enfin, un argument sensé que j'ai lu je ne sais plus où:
avec des "hacks" comme ça, tu gagnes un peu, mais ce peu va se réduire avec les années (progrès du compilo/métériel). Par contre, tu perds en lisibilité, et pour toujours...
Attention, je ne dis pas que les manipulations de bits (en info :-) sont inutiles, je dis qu'il faut faire attention.