operations and higher than the comparisons; the unary operation ``~`` has the
same priority as the other unary numeric operations (``+`` and ``-``).
-This table lists the bit-string operations sorted in ascending priority
-(operations in the same box have the same priority):
+This table lists the bit-string operations sorted in ascending priority:
+------------+--------------------------------+----------+
| Operation | Result | Notes |
Negative shift counts are illegal and cause a :exc:`ValueError` to be raised.
(2)
- A left shift by *n* bits is equivalent to multiplication by ``pow(2, n)``
- without overflow check.
+ A left shift by *n* bits is equivalent to multiplication by ``pow(2, n)``. A
+ long integer is returned if the result exceeds the range of plain integers.
(3)
- A right shift by *n* bits is equivalent to division by ``pow(2, n)`` without
- overflow check.
+ A right shift by *n* bits is equivalent to division by ``pow(2, n)``.
.. _typeiter:
object: plain integer
single: OverflowError (built-in exception)
- These represent numbers in the range -2147483648 through 2147483647. (The range
- may be larger on machines with a larger natural word size, but not smaller.)
- When the result of an operation would fall outside this range, the result is
- normally returned as a long integer (in some cases, the exception
- :exc:`OverflowError` is raised instead). For the purpose of shift and mask
- operations, integers are assumed to have a binary, 2's complement notation using
- 32 or more bits, and hiding no bits from the user (i.e., all 4294967296
- different bit patterns correspond to different values).
+ These represent numbers in the range -2147483648 through 2147483647.
+ (The range may be larger on machines with a larger natural word size,
+ but not smaller.) When the result of an operation would fall outside
+ this range, the result is normally returned as a long integer (in some
+ cases, the exception :exc:`OverflowError` is raised instead). For the
+ purpose of shift and mask operations, integers are assumed to have a
+ binary, 2's complement notation using 32 or more bits, and hiding no
+ bits from the user (i.e., all 4294967296 different bit patterns
+ correspond to different values).
Long integers
.. index:: object: long integer
- These represent numbers in an unlimited range, subject to available (virtual)
- memory only. For the purpose of shift and mask operations, a binary
- representation is assumed, and negative numbers are represented in a variant of
- 2's complement which gives the illusion of an infinite string of sign bits
- extending to the left.
+ These represent numbers in an unlimited range, subject to available
+ (virtual) memory only. For the purpose of shift and mask operations, a
+ binary representation is assumed, and negative numbers are represented
+ in a variant of 2's complement which gives the illusion of an infinite
+ string of sign bits extending to the left.
Booleans
.. index::
single: False
single: True
- These represent the truth values False and True. The two objects representing
- the values False and True are the only Boolean objects. The Boolean type is a
- subtype of plain integers, and Boolean values behave like the values 0 and 1,
- respectively, in almost all contexts, the exception being that when converted to
- a string, the strings ``"False"`` or ``"True"`` are returned, respectively.
+ These represent the truth values False and True. The two objects
+ representing the values False and True are the only Boolean objects.
+ The Boolean type is a subtype of plain integers, and Boolean values
+ behave like the values 0 and 1, respectively, in almost all contexts,
+ the exception being that when converted to a string, the strings
+ ``"False"`` or ``"True"`` are returned, respectively.
.. index:: pair: integer; representation
- The rules for integer representation are intended to give the most meaningful
- interpretation of shift and mask operations involving negative integers and the
- least surprises when switching between the plain and long integer domains. Any
- operation except left shift, if it yields a result in the plain integer domain
- without causing overflow, will yield the same result in the long integer domain
- or when using mixed operands.
+ The rules for integer representation are intended to give the most
+ meaningful interpretation of shift and mask operations involving negative
+ integers and the least surprises when switching between the plain and long
+ integer domains. Any operation, if it yields a result in the plain
+ integer domain, will yield the same result in the long integer domain or
+ when using mixed operands. The switch between domains is transparent to
+ the programmer.
:class:`numbers.Real` (:class:`float`)
.. index::