Useful functions to avoid underflow/overflow and using the remaining value.
unsigned int UnsignedSubtraction(unsigned int a, unsigned int b, unsigned int* r) { const unsigned int minval = 1; const unsigned int avaiable = a - minval; if (b > avaiable) { *r = b - avaiable; return minval; } *r = 0; return a - b; } unsigned int UnsignedAddition(unsigned int a, unsigned int b, unsigned int* r) { const unsigned int maxval = 255; const unsigned int avaiable = maxval - a; if (b > avaiable) { *r = b - avaiable; return maxval; } *r = 0; return a + b; }