[<<][staapl][>>][..]
Thu Dec 13 12:45:45 CET 2007
signed/unsigned comparisons
two issues. are they the same or not, and what should the default be?
they are not the same:
pos neg >
* always true in signed
* always false in unsigned
unsigned: carry
signed: sign of result (might overflow)
it's a bit silly, but i think it's time i admit i don't fully
understand it.. carry in addition is simple. carry in subtraction is
also not so difficult, since subtraction is addition with negative.
a carry on addition means overflow: the word's not big enough. simple.
but what is a carry on subtraction? let's isolate some cases.
result carry sign overflow
10 3 - 7 1 0 0
3 10 - -7 0 1 0
100 -100 - -53 0 1 1
-100 100 - 53 1 0 1
http://en.wikipedia.org/wiki/Overflow_flag
The overflow flag is usually computed as the xor of the carry into
the sign bit and the carry out of the sign bit.
In other words: addition adds one extra bit to the representation. In
order to not have overflow, for unsigned addition/subtraction this bit
needs to be 0, and for signed addition/subtraction this needs to be
the same as the sign bit.
So, for a signed comparison, take the sign bit of the result, and
assume there is no overflow. For unsigned take the carry bit.
[Reply][About][<<][staapl][>>][..]