how to separate hexadecimal

Nick Coghlan ncoghlan at iinet.net.au
Wed Feb 2 06:31:37 EST 2005


Paul Rubin wrote:
> jrlen balane <nbbalane at gmail.com> writes:
> 
>>would i be able to perform bitwise operation with the result?
>>say, i want to get the two's complement of the result, is this correct:
>>
>>twos_complement = (~ hex(hi + lo)) + 1
> 
> 
> You can do bit operations, but hex(n) is the hex string for n, which
> is not what you want.
> 
> If you want the hex form of the two's complement, just say
> 
>    hex(-(hi+lo) & 0xff)
> 
> assuming you want one byte, or
> 
>    hex(-(hi+lo) & 0xffff)
> 
> for two bytes.

More generally though, the "flip the bits and add one" of two's complement is 
just a hardware implementation trick for "2*n - x".

When not working at the hardware level, just go with the definition:

Py> def complement(val, limit=256):
...   if val >= limit or val < 0:
...     raise ValueError("Value out of range for complemented format")
...   if val == 0:
...     return 0
...   return limit - val
...
Py> hex(complement(0x55))
'0xab'
Py> hex(complement(0x55, 256*256))
'0xffab'

Cheers,
Nick.

-- 
Nick Coghlan   |   ncoghlan at email.com   |   Brisbane, Australia
---------------------------------------------------------------
             http://boredomandlaziness.skystorm.net



More information about the Python-list mailing list