【问题标题】:Is there a way to reverse this python function?有没有办法扭转这个python函数?
【发布时间】:2021-06-05 00:18:57
【问题描述】:
def function(value):
    bit = value << 1 
    movebit = bit & 255 
    if (value> 127 ):
        movebit = movebit | 1
    return (movebit)

我有这段代码,我正试图反转,例如 我知道第一行其实就是把user_input相乘,保存成bit。

问题是我不知道如何更改接下来的几行来反转输出。

示例:

test = [226, 3, 214, 111, 20, 240]
# after function => [197, 6, 173, 222, 40, 225]
# goal is to reverse them back to test
toReverse = [197, 6, 173, 222, 40, 225]

我的目标是 for 循环遍历 toReverse 并在每个元素上,将其发送到函数 并取回与 testArray 在同一索引上的数字。

【问题讨论】:

  • 用户将如何输入数字?有什么具体的格式吗?
  • 这是一个更大的解密任务的一部分,所以数字不是用户真正输入的,感谢评论,将更新问题以使其清楚。
  • 该函数使用&amp;|按位运算。这些操作无法撤消。
  • 我确实知道这些按位运算是不可逆的,但我认为可能是因为某些变量是恒定的,所以例如在包含 (movebit | 1) 的行上,我理解它基本上是逻辑与 movebit % 2 == 0 相同,而不是在数字上加 1,否则保持不变。 (我知道按位运算符是如何“在幕后”行动的,但我认为这里有一个问题。)
  • 正如一个答案中所解释的,它是对 8 个最低位的位旋转。所以如果你的输入超过八位,高位将被忽略,输出只会在 0-255 / 0000000011111111 范围内。

标签: python python-3.x bit-manipulation bitwise-operators bitwise-and


【解决方案1】:

我为这个任务创建了整个解密器(加密器)——你输入的代码是它的一部分。 退房: https://github.com/sisidor69/CyWar_Decryptor

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
【解决方案2】:

似乎功能是 rotl - 向左旋转操作。所以反向将是 rotr: 向右旋转:

def rotr(value):
    zbit = (value & 1) << 7
    return (value >> 1) | zbit

【讨论】:

  • 哇!非常感谢。你介意解释一下这是如何工作的吗?向左旋转操作是什么意思?
  • 我不确定我是否知道如何在评论中解释这些基本的编程内容。检查上面提供的维基百科链接。想看懂我写的,就拿纸,手动把所有操作一一实现。这个函数很简单。
猜你喜欢
  • 2017-11-29
  • 2014-12-11
  • 1970-01-01
  • 2019-12-26
  • 2022-01-07
  • 2019-09-10
  • 2022-06-14
  • 2019-04-03
  • 1970-01-01
相关资源
最近更新 更多