From 7d1c428838baf47540b87f2e2259012fe1321f23 Mon Sep 17 00:00:00 2001 From: chriseth Date: Tue, 25 Sep 2018 19:54:29 +0200 Subject: [DOCS] Semantics of negation. --- docs/types.rst | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'docs') diff --git a/docs/types.rst b/docs/types.rst index 43291af8..03896a96 100644 --- a/docs/types.rst +++ b/docs/types.rst @@ -82,10 +82,23 @@ Addition, Subtraction and Multiplication ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Addition, subtraction and multiplication have the usual semantics. -They wrap in two's complement notation, meaning that +They wrap in two's complement representation, meaning that for example ``uint256(0) - uint256(1) == 2**256 - 1``. You have to take these overflows into account when designing safe smart contracts. +The expression ``-x`` is equivalent to ``(T(0) - x)`` where +``T`` is the type of ``x``. This means that ``-x`` will not be negative +if the type of ``x`` is an unsigned integer type. Also, ``-x`` can be +positive if ``x`` is negative. There is another caveat also resulting +from two's complement representation:: + + int x = -2**255; + assert(-x == x); + +This means that even if a number is negative, you cannot assume that +its negation will be positive. + + Division ^^^^^^^^ -- cgit