Bitwise NOT Operator for Sage?
0b1000 & 0b1001 (AND) 0b1000 | 0b1001 (OR) 0b1000 ^^ 0b1001 (XOR)
All of these work as bitwise operators on the command line -- but how do I do bitwise NOT?
not in Python is supposed to be
~(see https://wiki.python.org/moin/BitwiseO... about how negative numbers are encoded), but Sage's preparser first transforms
0b1000 as an element of
ZZ for which the action of
~ is the multiplicative inverse:
sage: ~0b1000 1/8
This is because, in Sage:
sage: 0b1000.parent() Integer Ring sage: preparse("0b1000") "Integer('1000', 2)"
To get the python behaviour, you can either turn the sage preparser off:
sage: preparser(False) sage: ~0b1000 -9
or explicitely use python
sage: ~int(0b1000) -9
Another workaround is to notice that
not a is the same as
a xor 1.