2016-04-14 5 views
0

J'ai un registre 16bit.
A bit 0 est la valeur 0. A bit 1 ... 2, la valeur est 3
A bit 3 valeurs est une
A bit 4 la valeur ss 1.Récupération de la valeur à partir du registre 16bit

Donc à la fin du la valeur écrite dans mon registre est 30 parce que: (0 x 1) + (3 x 2) + (1 x 8) + (1 x 16) = 30

Maintenant je veux faire l'inverse pour obtenir quelle valeur est écrit i bits:
(30 & 1)/1 = 0
(30 & 2)/2 = 1 (c'est faux, il devrait être 3)
(30 & 8)/8 = 1
(30 & 16)/16 = 1

Ce que je fais mal?

Répondre

1
(30 & 2)/2 = 1 (this is wrong, it should be 3) 

Ceci est faux. Pour obtenir 2 bits vous devez et avec 3 décalé par sa position de bit. Dans ce cas, vous and avec 3 << 1 = 6

(30 & 6)/2 = 3 
+0

Hm .... et si j'ai la même situation, mais il y a aussi une certaine valeur dans le bit 9. Ensuite, dans ce cas, la valeur du registre est 1054. Bit 9..10 maintenez la valeur 2. – Josef

+1

donc juste décalé 3 par 9 bits. Écrivez les morceaux sur du papier et vous verrez. En général pour obtenir n bits à la position m et avec '((1 << n) - 1) << m' –

+0

Merci beaucoup. C'est exactement ce dont j'avais besoin. – Josef