如何在Python中xor十六进制值(1位答案)

时间:2015-06-03 20:22:24

标签: python

让我说我有以下变量 数据= 0xab12cd30 我想得到超过32位的xor(例如在verilog ^ data中)

例如

(给出8位示例)

data = 0x11 - >结果应为0

data = 0x10 - >结果是1

data = 0x21 - >结果应为0

data = 0x23 - >结果应为1

最简单的方法是什么? 使用Python 2.4.3

1 个答案:

答案 0 :(得分:2)

最简单的?也许这个:

bin(data).count('1') % 2

演示:

>>> for data in 0x11, 0x10, 0x21, 0x23:
        print bin(data).count('1') % 2

0
1
0
1

修改:如果使用的是一个没有bin的非常老的Python,那么这里就是一个自己动手的解决方案:

for data in 0x11, 0x10, 0x21, 0x23:
    xor = 0
    while data:
        xor ^= data & 1
        data >>= 1
    print xor

编辑2:更快,更棘手的解决方案:

for data in 0x11, 0x10, 0x21, 0x23:
xor = 0
while data:
    xor ^= 1
    data &= data - 1      # deletes the last 1-bit
print xor