Bonjour,
je voudrais décaler des bits vers la gauche ou vers la droite donc pour l'instant j'ai fais ça mais je ne sais pas si c'est bon :
unsigned char test = 1;
en bit ça fait 0000 0001
test = test << 2;
ça me fait 0000 0100 non ?
Bonjour,
je voudrais décaler des bits vers la gauche ou vers la droite donc pour l'instant j'ai fais ça mais je ne sais pas si c'est bon :
unsigned char test = 1;
en bit ça fait 0000 0001
test = test << 2;
ça me fait 0000 0100 non ?
Ça devrait. As-tu testé?
PS: Tu peux aussi écrire ça test <<= 2;
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
ouais j'ai testé mais je sais pas comment voir si c'est bon je cast en entier et j'affiche ?
mais je m'embrouille parce que là je mets un entier dans un char ensuite je décale le char de 2 mais 2 c'est un entier du coup.
Salut,
Il faut te dire que char, short, int, et tout le reste, ce n'est jamais représentatif du nombre de bits qui composent le type en question.
Typiquement, on considère (mais ce n'est pas forcément vrai) qu'un char sera composé de 8 bits, qu'un short sera composé de 2 char (soit 16 bits) et qu'un int sera composé de 4 char (soit 32 bits).
Il ne faut, en outre, pas se laisser abuser par le fait qu'un char puisse représenter les différentes lettres de l'alphabet : c'est avant tout une valeur numérique entière, tout comme short ou int, à la différence près qu'elle n'utilise que 8 bits (soit un intervalle de 255 possibilité) au lieu de 16 ou 32 (et qu'il y a une correspondance entre la valeur du char et l'index de la table ASCII ou autre qui permet de savoir quel "glyphe" utiliser pour la représentation).
D'un autre coté, les opérateurs << et >> pris comme opérateur de décalage de bits sont... des opérateurs, tout comme le sont les opérateur + ou moins.
Un opérateur n'est jamais qu'un signe qu permet de modifier la valeur de l'opérande de gauche selon l'opérande de droite.
Le "type" des différents opérandes correspond toujours à quelque chose de bien précis et est essentiellement déterminé par l'opérande de gauche d'une part et par l'opérateur d'autre part.
Ainsi, quand l'opérande de gauche est un char, "tout ce que l'on sait", c'est que la valeur sera limitée à 8 bits (255 possibilités), et, quand on utilise l'opérateur de décalage "<<" ou ">>" on sait que l'opérande de droite va correspondre au nombre de bits utilisés pour le décalage.
Ce sera, d'office, un entier (il n'est pas possible de faire un décalage de 1.5 bits), mais ce ne sera surement pas un int : ce sera juste une valeur numérique entière qui doit correspond au nombre de bits de décalage
Au final, tu peux (dois) te dire que tous les types que l'on utilise ne permettent jamais que d'indiquer quelle interprétation le processeur devra faire des différents bits qu'il rencontre et de la manière dont il doit envisager de les regrouper![]()
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
Pour tester c'est simple.
Tu connais ta table binaire?
... 1024 512 256 128 64 32 16 8 4 2 1
Si tu décales à gauche 1 fois, ton résultat est 2.
Si tu décales à gauche 2 fois, ton résultat est 4.
etc...
Et c'est la que la magie opère. Si tu es attentif, tu verras que décaler l'ensemble des bits à gauche pour un nombre qui est une puissance de 2 cela met le résultat au carré!
Partager