classification
Title: Behaviors of binary bitwise operators contradicting documentation
Type: behavior Stage: resolved
Components: Documentation Versions: Python 3.7, Python 3.5
process
Status: closed Resolution: not a bug
Dependencies: Superseder:
Assigned To: docs@python Nosy List: The Blue Wizard, docs@python, steven.daprano
Priority: normal Keywords:

Created on 2019-08-11 02:54 by The Blue Wizard, last changed 2019-08-11 03:43 by steven.daprano. This issue is now closed.

Messages (2)
msg349372 - (view) Author: John Rogers (The Blue Wizard) Date: 2019-08-11 02:54
In Python Language Reference (version 3.7), section 6.9 it states that the arguments of binary bitwise operators must be integers. However, the following expressions work without error:

    True & False
    False | True
    True ^ True

Each produces a boolean result (not integer) (False, True, False, respectively). Also I find that mixing booleans and integers does work too, though this time it produces integers.

One can easily test it on Python home page's console window. I also tested it on my Linux box running version 3.5.3. So it appears that it has been overlooked for quite some time!

As an aside: I do assume that boolean values are *distinct* from integers. If they are not, then my apologies!
msg349373 - (view) Author: Steven D'Aprano (steven.daprano) * (Python committer) Date: 2019-08-11 03:43
bools are integers, specifically they are a subclass of int:

py> isinstance(True, int)
True
py> issubclass(bool, int)
True

so the behaviour is correct.
History
Date User Action Args
2019-08-11 03:43:43steven.dapranosetstatus: open -> closed

nosy: + steven.daprano
messages: + msg349373

resolution: not a bug
stage: resolved
2019-08-11 02:54:30The Blue Wizardcreate