diff options
Diffstat (limited to 'source/arduino/bitwisexornot.rst')
-rw-r--r-- | source/arduino/bitwisexornot.rst | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/source/arduino/bitwisexornot.rst b/source/arduino/bitwisexornot.rst new file mode 100644 index 0000000..25389cb --- /dev/null +++ b/source/arduino/bitwisexornot.rst @@ -0,0 +1,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. + + |