You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否通过逆运算从XOR与位移操作结果还原原始x、y、z值?

问题解答

能否从最终输出还原原始x、y、z值?

可以,但前提是打包逻辑中x<<9、y<<5、z三个值的二进制位完全不重叠(即任意两个值的1位位置无交集)。你的测试用例满足这个条件,因此可以通过位掩码提取+XOR可逆性实现通用还原。

为什么当前Revert函数需要硬编码?

你写的Revert函数是用已知原始值反向抵消XOR操作,但实际上不需要依赖原始值,只要根据位段分配规则用掩码提取即可。

通用还原实现

根据你的打包逻辑,三个变量的位段分配如下:

  • z:占据低8位(bit0~bit7),与y<<5的bit8及以上位不重叠
  • y:左移5位后占据bit5bit8(对应y的取值范围015)
  • x:左移9位后占据bit9及以上高位

修改后的通用Revert函数:

let Revert = (parsedOutput) => {
  let temp = parsedOutput;

  // 提取z:掩码覆盖bit0~bit7,避免与y、x的位重叠
  const zMask = 0xFF;
  let z = temp & zMask;
  temp ^= z;

  // 提取y:掩码覆盖bit5~bit8,右移5位还原原始y值
  const yMask = 0x1F0;
  let y = (temp & yMask) >> 5;
  temp ^= y << 5;

  // 提取x:剩余位右移9位还原原始x值
  let x = temp >> 9;

  console.log(`还原结果:x=${x}, y=${y}, z=${z}`);
  return { x, y, z };
};

// 测试你的输入
Revert(13166); // 输出:还原结果:x=25, y=8, z=110

核心原理

  1. XOR可逆性:对于任意a和b,a ^ b ^ b = a,抵消XOR操作只需再次执行相同的XOR运算。
  2. 位掩码分离:当变量位段不重叠时,用掩码可以直接提取对应位的信息,再通过位移还原原始值。

注意事项

如果打包时x、y、z的位段存在重叠(比如z的值超过255,同时y的取值导致y<<5的位与z的位重叠),则无法唯一还原原始值——XOR会混合重叠位的信息,丢失区分依据。因此必须保证三个变量的位段完全独立。

内容的提问来源于stack exchange,提问作者ATT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 07:40:36