|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
|
|
In fact, whenever we add
a positive and a negative number, overflow won't occur, |
|
|
|
because the result will
be less than the magnitude of the larger value. |
|
|
When does overflow occur
in 2C? |
|
|
|
|
|
carry |
1 |
0 |
1 |
1 |
|
|
|
|
|
1 |
0 |
1 |
1 |
|
-5 |
|
|
|
1 |
0 |
0 |
1 |
|
-7 |
|
|
|
result |
0 |
1 |
0 |
0 |
|
4 |
|
|
When the signs of the values are the same, and the sign
of the result is different. |
|
|
|
Another way of detecting
this is by the fact that the carry in to the msb is |
|
|
|
different from the carry out. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|