Is unsetting a single bit in flags safe with Python variable-length integers?

You should be safe using that approach, yes.

~ in Python is simply implemented as -(x+1) (cf. the CPython source) and negative numbers are treated as if they have any required number of 1s padding the start. From the Python Wiki:

Of course, Python doesn’t use 8-bit numbers. It USED to use however many bits were native to your machine, but since that was non-portable, it has recently switched to using an INFINITE number of bits. Thus the number -5 is treated by bitwise operators as if it were written “…1111111111111111111011”.

In other words, with bitwise-and & you’re guaranteed that those 1s will pad the length of ~FLAG (a negative integer) to the length of status. For example:

  100000010000 # status
&       ~10000 # ~FLAG

is treated as

  100000010000
& 111111101111

= 100000000000 # new status 

This behaviour is described in a comment in the source here.

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)