其中的/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,然后把商存入hi
, lo
中的余数。 hi
和 lo
中的每一个都在 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 的 余数 得到较低的 字节。
这是来自 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,然后把商存入hi
, lo
中的余数。 hi
和 lo
中的每一个都在 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 的 余数 得到较低的 字节。