
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