Conversion implicite

Conversion implicite - C - Programmation

Marsh Posté le 15-03-2007 à 19:34:00    

Bonjour,
 
J'ai un petit souci de comprenette sur le sujet ..
 
Si je fais :
 

Code :
  1. float f = 3 / 2; // ça donne 1


donc là on a divisé 2 int puis converti en float
 
Maintenant :
 

Code :
  1. unsigned char a = 0xAA, b = 0x55, c = 0xAA, d = 0x55;
  2. int n = a | (b << 8) | (c << 16) | (d << 24);


Et là n est correct dans le sens où il vaut : 0xAA55AA55
 
Mais j'avoue ne pas être sûr de comprendre ...
car on dirait qu'au niveau conversion les chars ont été converti en int pendant ou avant le décalage puis les OU ont été appliqués.
 
si quelqu'un a un lien sur ces conversions ..
 
Merci.


Message édité par cricri_ le 16-03-2007 à 09:22:23
Reply

Marsh Posté le 15-03-2007 à 19:34:00   

Reply

Marsh Posté le 15-03-2007 à 21:17:16    

les char sont des bytes. donc il n'y a de conversion destructive puisque un byte passe dans un int


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 16-03-2007 à 09:24:40    

Oui, mais ce qu'on voit c'est que dans le premier cas il n'y a pas eu de conversion avant l'affectation, alors que dans le 2ème, à priori il y a bien eu conversion de char en int pour les décalages, et c'est ce genre de règle que je cherche à connaitre.

Reply

Marsh Posté le 16-03-2007 à 09:56:56    

De mémoire, les char/short sont convertis en int pour tout les traitements qu'ils subissent.

Reply

Marsh Posté le 16-03-2007 à 10:39:45    

c'est au niveau de l'opérateur qu'il y a conversion, de même que (b << 8) est une opération sur des int parce que 8 est un int, tu aurais pu mettre 3 / 2.0 pour avoir un résultat tel que tu pouvais le vouloir dans ton premier exemple. L'affectation n'est en cause dans ton deuxième exemple

Reply

Marsh Posté le 16-03-2007 à 16:46:24    

Merci.
 :jap:  

Reply

Marsh Posté le 16-03-2007 à 17:00:00    

Joel F a écrit :

De mémoire, les char/short sont convertis en int pour tout les traitements qu'ils subissent.


exact

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed