extend_u_16 mistake

extend_u_16 mistake

by Joshua Nicholas Pierre Bernimoulin -
Number of replies: 3

Bonjour,

dans le code de bit.h que vous nous donnez nous avons #define extend_u_16(v) merge8(0,v) qui est censé étendre une valeur non-signée de 8 bits sur 16 bits. 

Mais pour merge(v1,v2) on nous dit que v1 sera les LSB et que v2 sera les MSB (aussi bit.h). Ainsi la macro ne devrait-elle pas être  #define extend_u_16(v) merge8(v,0) pour que la valeur de v soit dans les LSB (autrement on multiplie v par 256 )?

Joshua

In reply to Joshua Nicholas Pierre Bernimoulin

Re: extend_u_16 mistake

by Jean-Cédric Chappelier -

Good catch!!

En effet, vous avez raison. (et venez donc de gagner des points de bonus pour votre projet, bravo !)

Ceci dit, nous n'utilis(er)ons pas cette macro. C'est un reste du début de la conception du projet qui a finalement été abandonné (et nous a donc échappé). Seul extend_s_16 sera utilisé (pour le pointeur de pile).

Merci pour la remarque !


In reply to Jean-Cédric Chappelier

Re: extend_u_16 mistake

by Joshua Nicholas Pierre Bernimoulin -

Merci beaucoup

Mais cela veut-t-il dire que nous ne devons pas utiliser cette macro? Si c'est le cas que utiliser à la place? La conversion (uint_16) explicite se comporte-elle de la bonne façon?

Merci d'avance

Joshua

In reply to Joshua Nicholas Pierre Bernimoulin

Re: extend_u_16 mistake

by Jean-Cédric Chappelier -

oui cette macro est totalement inutile : la conversion de valeurs de « même type » (et de même signe) vers plus de bits est totalement automatique et transparente.
En clair, utiliser simplement « x » (= l'identité) dans ce cas fonctionne parfaitement.
Comme dit : cette macro est une scorie du début de la conception du projet (dont on ne parle d'ailleurs nulle part, me semble-t-il).