Bonjour a vous,
j'ai un vrai probleme de comprehension concernant les operations binaires, je vous explique mon probleme :
J'ai 2 fichiers binaires en lecture.
chaque data est sur 16 bits
Fichier1 (dans le tableau float[]) :
0001
FFFB
...
Fichier2 (dans le tableau entier[]):
00FE
etc ...
La valeur du fichier 1 est comprise entre -1 et 1 donc par exemple pour le fichier 1, il y a les valeurs 1 et -5 ( signe ), en realite les valeurs sont : 0,1 et -0,5.
Les valeurs du fichier 2 sont juste des entiers sur 16 bits.
_____________
J'ai donc stocke mes valeurs dans 2 tableaux de short int.
le calcul se fera dans un long ou n'importe quoi de signe sur 32 bits (precision) que je devrais ensuite ecrire sous un format 16 bits en sortie et en binaire egalement.
le probleme :
je dois donc multiplier entier[i] avec float[i] ( je comprends que les noms entier et float peuvent preter a confusion, c'est juste pour me rapeler ce que represente les donnees lues et toutes enregistres dans un tableau de type short int sur 16 bits)
apres la multiplication je dois donc diviser le resultat par le nombre qui va bien :
Exemple : ( dans l'ordre entier * float )
5 * 2 = 10 et ensuite il faut que je divise par 10 car en realite c'est 5 * 0.2
10 * -8912 = -89120 et il faut ensuite diviser par 10000 ...
Bon alors la au niveau codage je suis parti sur l'idee de faire une longue division par 10 jusqu'a avoir un reste entier de 0 et diviser par 10 fois le nombre de division faite. Ca a l'air bien lourd et je me demande si il n'y a pas de solutions plus simple.
Probleme 2 :
Comment passer d'un 32 bits a un 16 bits en gardant seulement les bits de poids fort ....
Merci d'avance, ce probleme est ridicule a l'ecrit mais je n'ai aucune idee de l'implementation en faite ...
Cdt,
Kichon.
Partager