[Python-ideas] bitwise operations on bytes

Steven D'Aprano steve at pearwood.info
Sat Aug 8 07:54:36 CEST 2009


On Fri, 7 Aug 2009 11:19:20 pm Mark Dickinson wrote:

> > Also conceivable is using the shift operators >> and << on bytes,
> > but I personally would use that less often, and the result of such
> > an operation is ambiguous due to endianness.
>
> Agreed.  To make sense of the shift operators you effectively have
> to give 'position' interpretations for the individual bits, and
> there's no single obvious way of doing this;  for the plain bitwise
> operations this isn't necessary.

To me, the single obvious meaning of left- and right-shift is to shift 
to the left and the right :)

E.g. 

b"abcd" >> 8
=> "abc"

b"abcd" << 8 
=> "abcd\0"

which would have the benefit of matching what ints already do:

>>> [hex(ord(c)) for c in "ABCD"]
['0x41', '0x42', '0x43', '0x44']
>>> n = 0x41424344
>>> hex(n >> 8)
'0x414243'
>>> hex(n << 8)
'0x4142434400'


I'm not sure what other "obvious" meanings you could give them. Have I 
missed something?



-- 
Steven D'Aprano



More information about the Python-ideas mailing list