数字的二进制表示

时间:2014-11-03 12:46:13

标签: c

我有一个32位寄存器,其中< 7位代表地址> < 1位用于读/写> < 24位数据> 。首先将数据移入和移出芯片MSB。逻辑高(1)表示读取,逻辑低(0)表示写入。我的协议告诉我,我应该使用前7位作为地址,所以这应该意味着它只会引用前7位作为地址而第8位是读/写。如果我想从位置0x200读取值0x12,我应该将其设为0x13000200或0x25000200。

当我0x12000000(地址)|时0x01000000(读取逻辑为1)它会给我0x13000000。所以我怀疑它是否会从地址0x120x13或其他位置读取,因为前7位被访问地址,当地址为0x12时这个逻辑是正常的但是对于0x13它的位有点混乱或者我应该选择第二个“0x25000200”0x12在7位二进制是10010到这个我将添加位1用于读取所以它将成为100101依次十六进制为此将是0x25。因此,我将地址本身表示为7位和第8位作为读取,因此最终它将像0x250002000x13二进制是0001 0011所以我如何在这种情况下表示int?我怎么读,因为第8位已经是逻辑1?

3 个答案:

答案 0 :(得分:1)

根据您的协议: -

32Bit Register => < 7位地址> < 1比特R / W> < 24位数据>

以下是分别在0x12和0x13位读/写的位设置。

读取(假设数据为0作为读取操作): -

从地址0x12读取 - 0x25000000< 0010 0101 0000 0000 0000 0000 0000 0000>

从地址0x13读取 - 0x27000000< 0010 0111 0000 0000 0000 0000 0000 0000>

写入(假设数据为0x200): -

写入地址0x12 - 0x24000200< 0010 0100 0000 0000 0000 0010 0000 0000>

写入地址0x13 - 0x26000200< 0010 0110 0000 0000 0000 0010 0000 0000>

答案 1 :(得分:0)

如果协议的工作方式与您所说的相同(前7位用于地址,则1用于r / w,剩余24用于数据),那么您就是正确的。请参阅二进制中的十六进制值的“爆炸”:

value    address  r/w
0x12   = 0001001   0    You're Writing address 0001001
0x13   = 0001001   1    You're Reading address 0001001

答案 2 :(得分:0)

我认为这是错误的:“如果我想将值0x200写入0x12位置,我可以将其作为0x12000200”。本来应该是

  

<强> 0x14000200。

因为:二进制的地址0x12是“0001-0010”,因为你只考虑地址的前7位和读/写的1位'(1/0),所以前8位应该是“ 0010-0011“用于读取或”0010-0010“用于写入。

  

地址左移一个位置和读/写位
  ( 00010010&lt;&lt; 1&amp; 1/0 ), 0x15 / 0x14

相关问题