aboutsummaryrefslogtreecommitdiffstats
path: root/docs/source/arduino/bitwisexornot.rst
blob: 25389cba061430638331fac476f5645417f4fe03 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
.. _arduino-bitwisexornot:

Bitwise NOT (~)
===============

The bitwise NOT operator in C++ is the tilde character ~. Unlike &
and \|, the bitwise NOT operator is applied to a single operand to
its right. Bitwise NOT changes each bit to its opposite: 0 becomes
1, and 1 becomes 0. For example:



::

        0  1    operand1



::

       ----------
        1  0   ~ operand1



::

        int a = 103;    // binary:  0000000001100111
        int b = ~a;     // binary:  1111111110011000 = -104



You might be surprised to see a negative number like -104 as the
result of this operation. This is because the highest bit in an int
variable is the so-called sign bit. If the highest bit is 1, the
number is interpreted as negative. This encoding of positive and
negative numbers is referred to as two's complement. For more
information, see the Wikipedia article on
`two's complement. <http://en.wikipedia.org/wiki/Twos_complement>`_



As an aside, it is interesting to note that for any integer x, ~x
is the same as -x-1.



At times, the sign bit in a signed integer expression can cause
some unwanted surprises.