Kaydet (Commit) b4bc5cab authored tarafından Sanyam Khurana's avatar Sanyam Khurana Kaydeden (comit) Nick Coghlan

bpo-29710: Clarify documentation for Bitwise binary operation (GH-1691)

Mathematically, bitwise operations on integers behave as if there were an
infinite number of sign bits. Pragmatically, that gives the same answer as
using one extra sign bit for the bitwise logical operations.
üst 612dbefe
...@@ -382,7 +382,7 @@ modules. ...@@ -382,7 +382,7 @@ modules.
.. _bitstring-ops: .. _bitstring-ops:
Bitwise Operations on Integer Types Bitwise Operations on Integer Types
-------------------------------------- -----------------------------------
.. index:: .. index::
triple: operations on; integer; types triple: operations on; integer; types
...@@ -396,9 +396,9 @@ Bitwise Operations on Integer Types ...@@ -396,9 +396,9 @@ Bitwise Operations on Integer Types
operator: >> operator: >>
operator: ~ operator: ~
Bitwise operations only make sense for integers. Negative numbers are treated Bitwise operations only make sense for integers. The result of bitwise
as their 2's complement value (this assumes that there are enough bits so that operations is calculated as though carried out in two's complement with an
no overflow occurs during the operation). infinite number of sign bits.
The priorities of the binary bitwise operations are all lower than the numeric The priorities of the binary bitwise operations are all lower than the numeric
operations and higher than the comparisons; the unary operation ``~`` has the operations and higher than the comparisons; the unary operation ``~`` has the
...@@ -409,13 +409,13 @@ This table lists the bitwise operations sorted in ascending priority: ...@@ -409,13 +409,13 @@ This table lists the bitwise operations sorted in ascending priority:
+------------+--------------------------------+----------+ +------------+--------------------------------+----------+
| Operation | Result | Notes | | Operation | Result | Notes |
+============+================================+==========+ +============+================================+==========+
| ``x | y`` | bitwise :dfn:`or` of *x* and | | | ``x | y`` | bitwise :dfn:`or` of *x* and | (4) |
| | *y* | | | | *y* | |
+------------+--------------------------------+----------+ +------------+--------------------------------+----------+
| ``x ^ y`` | bitwise :dfn:`exclusive or` of | | | ``x ^ y`` | bitwise :dfn:`exclusive or` of | (4) |
| | *x* and *y* | | | | *x* and *y* | |
+------------+--------------------------------+----------+ +------------+--------------------------------+----------+
| ``x & y`` | bitwise :dfn:`and` of *x* and | | | ``x & y`` | bitwise :dfn:`and` of *x* and | (4) |
| | *y* | | | | *y* | |
+------------+--------------------------------+----------+ +------------+--------------------------------+----------+
| ``x << n`` | *x* shifted left by *n* bits | (1)(2) | | ``x << n`` | *x* shifted left by *n* bits | (1)(2) |
...@@ -438,6 +438,12 @@ Notes: ...@@ -438,6 +438,12 @@ Notes:
A right shift by *n* bits is equivalent to division by ``pow(2, n)`` without A right shift by *n* bits is equivalent to division by ``pow(2, n)`` without
overflow check. overflow check.
(4)
Performing these calculations with at least one extra sign extension bit in
a finite two's complement representation (a working bit-width of
``1 + max(x.bit_length(), y.bit_length()`` or more) is sufficient to get the
same result as if there were an infinite number of sign bits.
Additional Methods on Integer Types Additional Methods on Integer Types
----------------------------------- -----------------------------------
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment