From hexadecimal to one's complement in Python

旧街凉风 提交于 2020-01-01 04:40:05

问题


Is there an easy way to produce a one's complement in python?

For instance, if you take the hex value 0x9E, I need to convert it to 0x61.

I need to swap the binary 1's for 0's and 0's for 1's. It feels like this should be simple.


回答1:


Just use the XOR operator ^ against 0xFF:

>>> hex(0x9E ^ 0xFF)
'0x61'

If you need to work with values larger than a byte, you could create the mask from the int.bit_length() method on your value:

>>> value = 0x9E
>>> mask = (1 << value.bit_length()) - 1
>>> hex(value ^ mask)
'0x61'
>>> value = 0x9E9E
>>> mask = (1 << value.bit_length()) - 1
>>> hex(value ^ mask)
'0x6161'



回答2:


Hah. just found out that python bin() return a string!

so we can have some fun at this!

for x in numbers: # numbers is a list of int
    b = bin(x)
    #print b # e.g. String 0b1011100101
    b = b.replace('0', 'x')
    b = b.replace('1', '0')
    b = b.replace('x', '1')
    b = b.replace('1b', '0b')
    #print b # String 0b0100011010
    print int(b, 2) # the decimal representation


来源:https://stackoverflow.com/questions/13492826/from-hexadecimal-to-ones-complement-in-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!