其中的/256和%256有什么用,地址是怎么分高位和低位的?

What's the use of /256 and %256 in it and how is the address divided into hi and lo bits?

这是来自 lib_robotis 的代码片段,值 n 是我们输入的角度(旋转 dimexel 电机)。

根据电机内部芯片的架构,我们要求将目标位置的低位(用lo标识)赋给地址0x1e,高位(用[=14=标识) =]) 的目标位置到地址 0x1f.

def move_to_encoder(self,n);
    n=min(max(n,0),self.settings['max_encoder'])
    hi,lo=n/256, n%256
    return self.write_address(0x1e, [hi,lo])

首先你说的是higher/lower字节,而不是

除以256相当于右移8次,所以基本上就是高位。将除以 256 的余数(通过 模运算符 '%')有效地提取低字节,因为根据定义结果将 < 256。

n 是 0 <= n < 256*256 范围内的数字。它需要两个字节来表示该数字,因为一个字节可以编码从 0 到 255 的值。

hi,lo=n/256, n%256

相同
hi = n / 256
lo = n % 256

/是除法运算符,%是取余运算符,所以上面的代码说把n除以256,然后把商存入hilo 中的余数。 hilo 中的每一个都在 0 到 255 的范围内,因此它们每个都适合一个字节。 n == (256 * hi) + lo,因此没有信息丢失,电机控制器拥有执行所需操作所需的所有信息。

我假设您 post 中的代码是为 Python 2 编写的;它不会在 Python 上正常工作 3. 您应该将 n / 256 替换为 n // 256 以使代码在 Python.

的所有版本上工作

FWIW,有多种更好的方法可以将数字分解为高字节和低字节。一种使用内置的 divmod 函数:

hi, lo = divmod(n, 256)

将位想象成二进制表示法中的 "digits"。例如,如果您需要取数字 256 最右边的 2 位,您只需写 256%100,其中 100 是 10^2。同样,要取最右边的 8 个 "binary digits",即位,您必须将该数字除以 2^8,即 256。

we require to give the lower bit (identified by lo) of the goal position into the address 0x1e

256 是 28,所以除以 256 意味着 右移 8 位,得到高 字节.

以16位数字为例:

1100101100101101
↑↑↑↑↑↑↑↑

除以 256 即右移 8 位,将得到:

0000000011001011
        ↑↑↑↑↑↑↑↑

除以 256 的 余数 得到较低的 字节