Fix undefined C / C++ behavior for minimal signed values

The problem here is that the positive values for these are not
representable in a signed number. This would mean that the negative
value would be an undefined value.

By ensuring we use defined values here, we do this correctly.
Optimizations on clang 3.3 exposed this issue, since a spec would start
failing for this edge case.