Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 数字的二进制表示_C - Fatal编程技术网

C 数字的二进制表示

C 数字的二进制表示,c,C,我有一个32位寄存器,其中。首先将数据移入和移出芯片MSB。逻辑高(1)表示读取,逻辑低(0)表示写入。我的协议告诉我,我应该使用前7位作为地址,这意味着它将只引用前7位作为地址,第8位是读/写。如果我想从位置0x12读取值0x200,我应该将其设置为0x13000200或0x25000200 当我执行0x12000000(地址)|0x01000000(读取逻辑为1)时,它将给我0x13000000。所以我的疑问是它是否会从地址0x12或0x13或其他位置读取,因为地址的前7位是访问的,当地址为

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


当我执行
0x12000000
(地址)|
0x01000000
(读取逻辑为1)时,它将给我
0x13000000
。所以我的疑问是它是否会从地址
0x12
0x13
或其他位置读取,因为地址的前7位是访问的,当地址为0x12时,这个逻辑是正常的,但对于0x13,它的位会混淆,还是应该使用第二个“0x25000200”7位二进制中的0x12是10010,我将为读取添加位1,因此它将变成100101,依次为十六进制,因为这将是0x25。所以我用7位表示地址本身,第8位表示为read,所以最后它将类似于
0x25000200
0x13
binary是0001 0011,那么在这种情况下如何表示int?因为第8位已经是逻辑1,我该如何读取呢?

如果协议按照您所说的方式工作(前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
我认为这是错误的:“如果我想将值0x200写入位置0x12,我可以给出0x12000200”。应该是

0x14000200。

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

这就是地址左移一个位置,并带有读/写位

00010010根据您的协议:-

32位寄存器=>

下面是分别在位置0x12和0x13读取/写入的位设置

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

从地址0x12读取- 0x25000000

从地址0x13读取- 0x27000000

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

写入地址0x12- 0x24000200

写入地址0x13-
0x26000200

您的地址和读/写字段重叠。如果最重要的7位是地址,那么结果应该是0x24000200。是否发生了奇怪的事情?如果协议说前7位访问为地址,那么只有那么多位将被解释为地址,第8位肯定会被解释为R/W位仅限。因此类似于:(7+1+24=32)。如果协议如此定义。在您的符号中,读/写位必须是最高的:
0x80
(在第一个字节上),而不是
0x01