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?
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?
The bitwise 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 int
:
sage: ~int(0b1000)
-9
Another workaround is to notice that not a
is the same as a xor 1
.
Please start posting anonymously - your entry will be published after you log in or create a new account.
Asked: 2014-08-18 23:30:28 +0100
Seen: 2,678 times
Last updated: Aug 20 '14