其中 /256 和 %256 有什么用,地址如何分为 hi 和 lo 位?



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

根据电机内芯片的架构,我们需要将目标位置的较低位(由lo标识)放入地址0x1e,将目标位置的较高位(由hi标识)放入地址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])
n

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

hi,lo=n/256, n%256

hi = n / 256
lo = n % 256

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

我假设你帖子中的代码是为Python 2编写的;它在Python 3上无法正常工作。您应该将n / 256替换为n // 256,以使代码适用于所有版本的 Python。

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

hi, lo = divmod(n, 256)

首先,您谈论的是更高/更低的字节,而不是

除以 256 与向右移动 8 次相同,因此基本上会产生高字节。将除法的余数除以 256(通过模运算符 '%')有效地提取较低的字节,因为根据定义,结果将<256。

我们需要将目标位置的较低位(由 LO 标识)放入地址0x1e

256

是 2 8,所以除以 256 意味着右移8 位,给你高字节

以一个 16 位数字为例:

1100101100101101
↑↑↑↑↑↑↑↑

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

0000000011001011
        ↑↑↑↑↑↑↑↑

除以 256 的余数为您提供较低的字节

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

最新更新