我需要通过位操作来转换输入数字。规则如下:
这是一张翻译表:
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。我头痛坐了三个小时,不知道怎么了。抱歉,如果这是一些琐碎的事情或者这里有一些愚蠢的错误。请帮忙。你知道吗
下面给出了翻译表的相应结果:
为了更好地理解:
位0应为1->;1
位1应该是输入的翻转位2。首先选择位2:
n&4
,然后将其从位2移到位1:(n&4)>>1
,最后翻转位1的值(2**1=2):((n&4)>>1) ^ 2
。第2位应该是输入的第1位。首先选择位1:
n&1
,然后将其从位1移到位2:(n&2) << 1
位3应该是输入的翻转位0。首先选择位0:
n&1
,然后将其从位0移到位3:(n&1) << 3
,最后翻转位3的值(2**3=8):((n&1) << 3) ^ 8
根据你的规格
你的代码应该是
相关问题 更多 >
编程相关推荐