Search code examples
language-agnostictypes

When to use unsigned values over signed ones?


When is it appropriate to use an unsigned variable over a signed one? What about in a for loop?

I hear a lot of opinions about this and I wanted to see if there was anything resembling a consensus.

for (unsigned int i = 0; i < someThing.length(); i++) {  
    SomeThing var = someThing.at(i);  
    // You get the idea.  
}

I know Java doesn't have unsigned values, and that must have been a concious decision on Sun Microsystems' part.


Solution

  • I was glad to find a good conversation on this subject, as I hadn't really given it much thought before.

    In summary, signed is a good general choice - even when you're dead sure all the numbers are positive - if you're going to do arithmetic on the variable (like in a typical for loop case).

    unsigned starts to make more sense when:

    • You're going to do bitwise things like masks, or
    • You're desperate to to take advantage of the sign bit for that extra positive range .

    Personally, I like signed because I don't trust myself to stay consistent and avoid mixing the two types (like the article warns against).