将表示位置的整数分解为多个部分,然后再返回
Breaking an integer, representing position, into parts and back again
我正在使用一些表示电机绝对位置的硬件,使用无符号整数。规格告诉我,一位数字代表100nm。
值 100,000 则为 <=> 10mm,即 100,000 x 100== 10,000,000 nm <=> 10mm。
对于对电机进行精细控制的用户来说,处理如此大的数字是不切实际的。所以我用它的mm,um和nm部分来呈现这个数字。我可以得到那些作为
//Input number x 100 -> value in nm
unsigned int nmVal = input * 100;
unsigned int mmValue = (nmVal / 10000000 % 10) * 10 + (nmVal / 1000000 % 10);
unsigned int umValue = (nmVal / 100000 % 10) * 100 + (nmVal / 10000 % 10) * 10 +
(nmVal / 1000 % 10);
unsigned int nm = (nmVal / 100 % 10) * 100;
我可以在三个编辑框中将它们在 UI 中显示为 mmValue + umValue + nmValue。
然后,用户可以轻松修改nm部件,而无需担心其他部件。
问题是,如何在不使用双精度的情况下从"部分"到代表位置的整数?
如果我只是将数字相加,即
int position = mmVal * 1e-3 + umVal*1e-6 + nmVal*1e-9
可变位置将为零。
反之亦然:
position_t nmPos = mmVal * 1e6 + umVal * 1e3 + nmVal;
相关文章:
- boost::asio如何生成多个协同程序,然后加入它们
- 等待整个 omp 块完成,然后再调用第二个函数
- 如何阅读两个单词,然后阅读C++中的一行?
- 我如何创建一个列表,然后从中创建两个列表,其中一个用于偶数,另一个用于奇数?
- 在C++中编程,将 3 个数字发送到一个函数,然后计算这 3 个数字的平均函数
- 打印两个反向空心矩形,然后在其内部打印两条对角线
- 如何打印第一个和最后一个元素的和,然后打印第二个和倒数第二个元素的总和,依此类推
- 是否可以将多个结构作为一个数据包存储在一个函数中,然后传递给其他函数并在那里提取?
- 对数组进行排序的算法,先是第一个元素,然后是前 2 个元素,然后是前 3 个元素,依此类推
- 如何检查单向链表的每个 3 个元素,然后删除其中一些元素?
- 按第一个值的递减顺序对一组对进行排序,然后按第二个值的字母顺序排序
- 如何将两个 jlong 数据类型转换为 jstring,然后将两个字符串连接在一起以便从 JNI 将字符串返回给 jav
- 如何存储多个用户输入,然后以C++显示它们
- 将40个字节长的数据框从十六进制转换为二进制,然后转换为十进制
- SSE2包装的8位整数签名乘数(高半):将M128i(16x8位)分解为两个M128i(每个8x16),然后重新包装
- 将2D数组传递到函数,然后将其乘以两个
- C MPI,使用多个节点,首先在节点级别上降低,然后减小到头节点
- 将表示位置的整数分解为多个部分,然后再返回
- 如何按第一个,然后是第二个,然后是第三个对 2d 数组进行排序,..使用 C++ 的列
- 它可以工作,直到我输入第二个输入然后它关闭