Understanding the working mechanis of python unary arithmetic operators.

hongy...@gmail.com hongyi.zhao at gmail.com
Sat Oct 2 08:48:27 EDT 2021

On Saturday, October 2, 2021 at 4:59:54 PM UTC+8, ju... at diegidio.name wrote:
> On Saturday, 2 October 2021 at 10:34:27 UTC+2, hongy... at gmail.com wrote: 
> > See the following testings: 
> > 
> > In [24]: a=3.1415926535897932384626433832795028841971 
> > In [27]: -a 
> > Out[27]: -3.141592653589793
> You've never heard of floating-point? Double precision has 53 significant bits of mantissa, corresponding approximately to 16 decimal digits. 
> <https://en.wikipedia.org/wiki/Double-precision_floating-point_format#IEEE_754_double-precision_binary_floating-point_format:_binary64>
> > In [17]: ~-+1 
> > Out[17]: 0
> << The unary ~ (invert) operator yields the bitwise inversion of its integer argument. The bitwise inversion of x is defined as -(x+1). It only applies to integral numbers or to custom objects that override the __invert__() special method. >> 
> <https://docs.python.org/3/reference/expressions.html#unary-arithmetic-and-bitwise-operations>
> > I'm very puzzled by these operators. Any hints will be highly appreciated.
> Try and read the proverbial manual: that's truly a fundamental skill... 

Thank you for your explanation. Then what about the following questions?:

1. Should `+' and `-' be classified as binary operators or unary operators? As we all know, `a + b', and `a - b' are the normal ways we do basic arithmetic operations.

2. See the following testings:

In [20]: bool(int(True))
Out[20]: True

In [21]: bool(~int(True))
Out[21]: True

In [22]: bool(~~int(True))
Out[22]: True

In [23]: bool(~~~int(True))
Out[23]: True

In [24]: bool(int(False))
Out[24]: False

In [25]: bool(~int(False))
Out[25]: True

In [26]: bool(~~int(False))
Out[26]: False

In [27]: bool(~~~int(False))
Out[27]: True

Why can’t/shouldn't we get something similar results for both `True' and `False' in the above testings?


More information about the Python-list mailing list