在它中使用/ 256和%256有什么用?地址如何​​分为hi和lo位?

时间:2015-01-22 10:10:43

标签: python microcontroller robot

这是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])

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

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

hi,lo=n/256, n%256

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

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

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

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

hi, lo = divmod(n, 256)

答案 2 :(得分:1)

想想它们是&#34;数字&#34;在二进制表示法中。如果你需要拿两个最右边的数字256,你只需写256%100,其中100是10 ^ 2。同样,要取8个最右边的&#34;二进制数字&#34;,即位,你必须将数字除以2 ^ 8,即256。

答案 3 :(得分:1)

  

我们要求将目标位置的较低位(由lo标识)提供给地址0x1e

256是2 8 ,因此除以256表示右移 8位,为您提供高字节

以16位数字为例:

1100101100101101
↑↑↑↑↑↑↑↑

将它除以256是右移8位,将给你:

0000000011001011
        ↑↑↑↑↑↑↑↑

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