The "unsigned" is mainly used when moving small variables into bigger oned. E.g. moving an unsinged short into a long results in a range from 0 to 65535 while moving a signed short into a long has a range from -32768 to 32767. It is totally ignored for add and subtract operations because the binary result is always the same.
When outputting unsigned values with printf you have to use the correct format specification (%u instead of %d) because there is no checking if you do it correct. You can even output a long with %s which usually leads to a crash. So if you work with unsigned longs you have to use %lu. If you use %ld you will get negative numbers for everything above 2^32.
Generelly you can use this table:
signed short -> %hd
unsigned short -> %hu
signed int -> %d
unsigned int -> %u
signed long -> %ld
unsigned long -> %lu
Because some compilers always put long (32bit) values onto the stack (like most Amiga compilers), you might always have to use %ld/%lu for shorts, too. %d is interpreted compiler-specific and should only be used with int which is compiler-specific, too.
Bye,
Thomas