Clarify shift operator

Further clarify shift operators

Return infinity

Changes from review

Update docs/types/value-types.rst

Co-Authored-By: ChrisChinchilla <chriswhward@gmail.com>

Formatting fix
This commit is contained in:
Chris Ward 2019-02-25 14:59:01 +01:00
parent 4d8c57006b
commit f0f9f5e2f3

View File

@ -59,15 +59,16 @@ This means that, for example ``~int256(0) == int256(-1)``.
Shifts Shifts
^^^^^^ ^^^^^^
The result of a shift operation has the type of the left operand. The The result of a shift operation has the type of the left operand, truncating the result to match the type.
expression ``x << y`` is equivalent to ``x * 2**y``, and, for positive integers,
``x >> y`` is equivalent to ``x / 2**y``. For negative ``x``, ``x >> y`` - For positive and negative ``x`` values, ``x << y`` is equivalent to ``x * 2**y``.
is equivalent to dividing by a power of ``2`` while rounding down (towards negative infinity). - For positive ``x`` values, ``x >> y`` is equivalent to ``x / 2**y``.
Shifting by a negative amount throws a runtime exception. - For negative ``x`` values, ``x >> y`` is equivalent to ``(x + 1) / 2**y - 1`` (which is the same as dividing ``x`` by ``2**y`` while rounding down towards negative infinity).
- In all cases, shifting by a negative ``y`` throws a runtime exception.
.. warning:: .. warning::
Before version ``0.5.0`` a right shift ``x >> y`` for negative ``x`` was equivalent to ``x / 2**y``, Before version ``0.5.0`` a right shift ``x >> y`` for negative ``x`` was equivalent to ``x / 2**y``,
i.e. right shifts used rounding towards zero instead of rounding towards negative infinity. i.e., right shifts used rounding up (towards zero) instead of rounding down (towards negative infinity).
Addition, Subtraction and Multiplication Addition, Subtraction and Multiplication
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^