gpt4 book ai didi

python - 移动和翻转位

转载 作者:太空宇宙 更新时间:2023-11-04 04:21:58 25 4
gpt4 key购买 nike

我需要通过位操作来转换输入数字。以下是规则:

  • bit 0 应该是 1;
  • bit 1 应该是输入的翻转后的bit 2;
  • bit 2应该是输入的bit 1;
  • 第 3 位应该是输入的翻转后的第 0 位。

这是一个翻译表:

Input  Input (bin)  Output  Output (bin)
0 0000 11 1011
1 0001 3 0011
2 0010 15 1111
3 0011 7 0111
4 0100 9 1001
5 0101 1 0001
6 0110 13 1101
................................

这是我尝试过的:

def tr(n):
return ((n & 1 ^ 1) << 1) | ((n >> 1 & 1) << 2) | \
((n >> 2 & 1 ^ 1) << 3) | 1

tr(0) 给出了正确的数字:11,但是 tr(1) 给了我 9。我头痛地坐了 3 个小时,无法理解怎么了。对不起,如果这是微不足道的事情或者这是一些愚蠢的错误。请帮忙。

最佳答案

下面是你翻译表对应的结果:

def tr(n):
return 1 | ((n&4)>>1) ^ 2 | (n&2) << 1 | ((n&1) << 3) ^ 8

为了更好的理解:

  1. bit 0 应该是 1 -> 1

  2. 位 1 应该是输入的翻转位 2。首先选择位 2:n&4然后将其从第 2 位移动到第 1 位:(n&4)>>1最后翻转第1位的值(2**1=2):((n&4)>>1) ^ 2 .

  3. bit 2 应该是输入的 bit 1。首先选择位1:n&1然后将其从第 1 位移动到第 2 位:(n&2) << 1

  4. 位 3 应该是输入的翻转位 0。首先选择位0:n&1然后将其从第 0 位移动到第 3 位:(n&1) << 3最后翻转第 3 位 (2**3=8) 的值:((n&1) << 3) ^ 8

关于python - 移动和翻转位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54308810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com