Ask Your Question

Bitwise NOT Operator for Sage?

asked 2014-08-18 23:30:28 +0200

david8381 gravatar image

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?

edit retag flag offensive close merge delete

2 Answers

Sort by ยป oldest newest most voted

answered 2014-08-19 00:21:15 +0200

tmonteil gravatar image

updated 2014-08-19 00:22:30 +0200

The bitwise not in Python is supposed to be ~(see 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

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

or explicitely use python int:

sage: ~int(0b1000)

Another workaround is to notice that not a is the same as a xor 1.

edit flag offensive delete link more

answered 2014-08-20 11:42:54 +0200

slelievre gravatar image

As a complement to @tmonteil's answer, you can append 'r' (for 'raw') to some input to prevent it from being preparsed, without globally turning the preparser off.

Using the same example as @tmonteil:

sage: ~0b1000r
edit flag offensive delete link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower


Asked: 2014-08-18 23:30:28 +0200

Seen: 2,527 times

Last updated: Aug 20 '14