Bonjour,
J'ai beau me creuser la tête, je n'arrive pas à comprendre à quoi peuvent bien servir concrètement les opérateurs <<, >> et >>>
Vous en êtes-vous déjà servi ? Si oui, dans quel but ?
Merci !
Version imprimable
Bonjour,
J'ai beau me creuser la tête, je n'arrive pas à comprendre à quoi peuvent bien servir concrètement les opérateurs <<, >> et >>>
Vous en êtes-vous déjà servi ? Si oui, dans quel but ?
Merci !
çà décale les bits, c'est utilisé par certains algorithmes travaillant sur les bits. La pluspart du temps on s'en sert pas, puisque la pluspart des algos en ont pas besoin. Parmis les algos qui utilisent fortement ce genre d'opération, de tête:
les calculs de hash
les algorithme de pseudo random
certains algorithmes de cryptage
certains algorithmes de compression
on peut ajouter :
- la multiplication entiere rapide par 2.
- la division entiere rapide par 2.
- la creation d'une couleur codee dans un entier 32-bits a partir des composants ARGB et inversement.
pour les divisions entières, bien que c'était un gain non négligeable en terme de cycles cpu sur les 386, les techniques d'optimisation actuelles ne sont plus les mêmes qu'avant. Je pense que les cpu modernes peuvent faire la division entière, sans utiliser les shifts,en seulement 1 cycle, de plus, avec les pipelines multiples des cpu, ce qui compte c'est de s'assurer que le pipeline ne se vide pas pour gagner le plus de temps possible. Y a quasiment plus que les compilos qui savent gérer çà, c'est devenu trop complexe pour le faire à la main :p
De plus, java étant une machine régulière, la vitesses des instruction n'est pas régie pas une loi fixe :p
par contre +1 pour la couleur rgb 32, j'avais oublié çà.
Merci beaucoup pour vos réponses, je vais aller jeter un oeil sur cette histoire de couleur pour avoir un cas vraiment concret.
résultat binaire, les bits du int ressemblent à çà:Code:
1
2 int rvb = ((r && 0xFF) << 16) + ( (v &0xFF << 8)) + ( b &0xFF);
Code:00000000rrrrrrrrvvvvvvvvbbbbbbbb
Sauf que la ca va etre tout transparent sur le coup avec les couleurs 32-bits Java standard (c'est tout a fait correct pour une couleur 24-bits, sauf la pitite erreur dans la composition du rouge avec un && plutot qu'un &) :
avec a = 255 pour une couleur opaque.Code:int argb = ((a & 0xFF) << 24) | ((r & 0xFF) << 16) | ((g & 0xFF) << 8) | ((b & 0xFF) << 0);
Note : sur des entiers + ~= | d'ou la formule de tchize_.
:fessee: j'ai dit rvb, pas argb :D
par contre, merci de la correction pour les & :D
Et j'ai ensuite explique pourquoi on ne verrait rien s'afficher si on dessinait a l'ecran avec une telle couleur :P
quand on utilise du rgb, le canal alpha est ignoré, donc pas besoin de le mettre à 255.
Ca existe egalement en JScript, ECMAScript/JavaScript.
le shift gauche, qu'il soit signé ou non, a le même comportement, donc l'opérateur <<< n'a pas de raison d'exister. Pour le shift droit non signé en C, il faut passer par une variable non signée, autrement dit faut chipoter :)
en java on a un opérateur shift droit non signé pour compenser l'absence de variable non signée :)