这是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])
答案 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
和其余的在lo
。 hi
和lo
中的每一个都在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的余数为您提供较低的字节。