Arithmetic: overflow
So far, we have always assumed that we have enough bits to represent a value.
However, a computer must work with a finite number of bits.
What happens if the result doesn't fit in the available bits?
This is called overflow.
Overflow occurs when the result of an operation is greater than the max possible value
or less than the min value.
In UB:
carry 1 1 1 1
1 0 1 1 11
0 1 1 1 7
result 0 0 1 0 2
What should the result be?
Overflow occurs in UB when there is a carry out of the msb.  (Value is too large for N bits.)
What about 2C?
In our example of 2C addition, there was a carry out of the msb, but the result was correct!
carry 1 1 1 1
1 0 1 1 -5
0 1 1 1 7
result 0 0 1 0 2