哪个int32寄存器内容乘以42得到结果1?

问题描述

我正在尝试了解如何在 int32 寄存器 document.getElementById('search').addEventListener('submit',function(e) { e.preventDefault(); getData(); }) async function getData(url = '',data = {}) { const response = await fetch(url,{ method: 'GET',mode: 'cors',cache: 'no-cache',credentials: 'same-origin',headers: { 'Content-Type': 'application/json' },}); return response.json(); } getData ('https://localhost.com/lookup/url') .then(data => { console.log(data); }) 中表示浮点值。

我需要找到 app.listen(port,() => { console.log(`Example app listening at http://localhost:${port}`) }) ``` Using the // in the url will comment out the rest 的值,其中 R0

我可以在 R0 中放入什么值?

我已经试过把 R0 R0 * 42 = 1 但它会是 R0 因为它是 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 不存在。

,

您可以将结果乘以一个数字(即 100),然后在使用前除以:

R0 = 1 * 100 / 42;
// later...
printf(".2f",R0 / 100.0f);