c - 哪个 int32 寄存器内容乘以 42 得到结果 1?
问题描述
我试图了解如何在 int32 register 中表示浮点值R0
。
我需要找到R0
where的值R0 * 42 = 1
我可以投入什么价值R0
?
我一直在尝试放置 R0 1/42
,但这将是0
因为它是 int。
有什么建议么?
解决方案
您要问的是 32 位乘法的 42 的乘法非浮点逆数。
这将是一个整数,如果在 32 位寄存器中乘以 42,将得到 1。
正如 Erik Eidt 指出的那样,这不是严格的数学逆,更多的是一个的效果,正如溢出的模效应所展示的那样.
让我们绕道寻找一个数字,如果乘以 42,则在 32 位寄存器中得到 2。这个数字是 0x3CF3CF3D。2的结果是截断到32bit造成的,因为0x3CF3CF3D乘以42就是0xA00000002,而“A”部分超出了32bit。注意 0x3CF3CF3D 是奇数,没有整数的一半。
然而,没有这种神奇的倒数会导致 1,因为任何数字乘以偶数(如 42)都不会产生任何奇数,无论超过 32 位的部分可能有多大。(归功于 Nate Eldredge,他在评论中指出了这一令人信服的观察结果)。
同样的 0x3CF3CF3D 乘以 21 得到 1(实际上是 0x500000001)。
所以对于这个奇数 21,乘法逆元确实存在,但对于 42 不存在。
推荐阅读
- reactjs - 我的 React Web App 在本地主机中运行良好,但在托管时无法运行
- python - Pandas - 将带有括号中的值的文本拆分为多列
- html - 跨越两列的 HTML 表
- javascript - 我可以从 XAMPP 访问我的本地网络设备吗?
- c++ - std::vector 的擦除功能
- .htaccess - 如何友好地显示 seo 的 url?
- azure-devops - 如何使用 Azure DevOps REST API 覆盖列表变量?
- python-3.x - 使用 upper() 方法弹出字母
- java - 导入 com.zaxxer.hikari.HikariConfig,无法解析符号,IntelliJ
- python - 绘制轨道类型错误:需要浮点数