从16位寄存器中获取价值

时间:2016-04-14 09:12:56

标签: bit-manipulation bit bit-shift cpu-registers bit-fields

我有一个16位寄存器

  • 在位0处,值为0
  • 在位1 ... 2处,值为3
  • 在第3位,值为1
  • 在第4位,值为1

所以最后我的寄存器中的书面值是30,因为:

(0 x 1) + (3 x 2) + (1 x 8) + (1 x 16) = 30  

现在我想做反向以获取在位中写入的值:

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

我做错了什么?

1 个答案:

答案 0 :(得分:1)

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

这是错误的。要得到2位,你必须将3位移位。在这种情况下,您and3 << 1 = 6

(30 & 6) / 2 = 3