J'essaie de résoudre une énigme dans un test de programmation. Clause de non-responsabilité: C'est un test pour un emploi, mais je ne cherche pas de réponse. Je cherche juste à comprendre comment faire cela. Le test nécessite que je propose un ensemble de solutions à un ensemble de problèmes dans un délai de deux semaines, et qu'il ne soit pas nécessaire d'arriver à isoler les solutions.Extraction de nombres à partir d'un entier de 32 bits
Ainsi, le problème:
J'ai un nombre de 32 bits avec les bits disposés comme ceci:
siiiiiii iiiiiiii ifffffff ffffffff
Où:
- s est le bit de signe (1 = = négatif)
- i est 16 bits entiers
- f est 15 bits de fraction
L'affectation consiste à écrire quelque chose qui décode un nombre entier de 32 bits en un nombre à virgule flottante. Compte tenu des entrées suivantes, il devrait produire les résultats suivants:
input output
0x00008000 1.0
0x80008000 -1.0
0x00010000 2.0
0x80014000 -2.5
0x000191eb 3.14
0x00327eb8 100.99
Je ne pas avoir du mal à obtenir le bit de signe ou la partie entière du nombre. Je reçois le bit de signe comme ceci:
boolean signed = ((value & (1 << 31)) != 0);
je reçois les parties entières et fractions comme ceci:
int wholePart = ((value & 0x0FFFFFFF) >> 15);
int fractionPart = ((value & 0x0000FFFF >> 1));
La partie que je vais avoir un problème avec est d'obtenir le nombre dans les 15 derniers bits pour faire correspondre les valeurs attendues. Au lieu de 3,14, je reçois 3,4587, etc.
Si quelqu'un pouvait me donner un indice sur ce que je fais de mal, j'apprécierais. Plus que toute autre chose, le fait que je n'ai pas compris cela après des heures de travail avec ça me rend un peu fou. :-)
Vous avez un problème avec le masque wholePart que les données de test ne seront pas re veau. Les parenthèses doublées dans l'expression fractionPart ne correspondent pas aux parenthèses dans l'expression wholePart; mais je ne vois pas de raison de déplacer la fractionPart de toute façon. Le masque fractionPart est également faux. –